๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ž๋ฃŒ ๊ตฌ์กฐ] ์ž๋ฐ”๋ฅผ ์ด์šฉํ•œ ๊ทธ๋ž˜ํ”„์˜ ๊ตฌํ˜„-์ธ์ ‘ ํ–‰๋ ฌ ๊ตฌํ˜„ :: Graph implementation by using adjacency matrix in java.

by Wonit 2020. 6. 25.

์ธ์ ‘ ํ–‰๋ ฌ

์ธ์ ‘ ํ–‰๋ ฌ์€ G= {V, E} ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ boolean์˜ ํ–‰๋ ฌ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

ํ–‰๋ ฌ์˜ ์ƒํƒœ์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • M[i][j] = 1์ธ ๊ฒฝ์šฐ
  • M[i][j] = 0์ธ ๊ฒฝ์šฐ

ํ–‰๋ ฌ์˜ ์ƒํƒœ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ฐ„์„ ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ, ์ฆ‰ i, j๊ฐ€ ๊ทธ๋ž˜ํ”„์— ์กด์žฌํ•  ๋•Œ๋ฅผ ๋œปํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋Š” 0์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ์˜ ํŠน์ง•

์ธ์ ‘ ํ–‰๋ ฌ์„ ์ด์šฉํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋ฐ”๋กœ ๊ฐ„์„ ์˜ ์กด์žฌ ์œ ๋ฎค์ด๋‹ค.

 

์ •์  u์™€ ์ •์  v๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” M[u][v]์˜ ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ์™€ 0์ธ ๊ฒฝ์šฐ๋งŒ ์กฐ์‚ฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ธ ์ƒ์ˆ˜ ์‹œ๊ฐ„์ด ๋‚˜์˜จ๋‹ค.


๋˜ํ•œ ์ธ์ ‘ ํ–‰๋ ฌ์€ n๊ฐœ์˜ ์ •์ ์„ ๊ฐ–๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ฐ„์„ ์˜ ์ˆ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ n^2์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ํŠน์ง•์ด๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ์˜ ์žฅ์ 

  • ๊ฐ„์„ ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ํƒ์ƒ‰์— ๋Œ€ํ•œ ์†๋„๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ํšจ์œจ์ ์ด๋‹ค.
  • ๊ทธ๋ž˜ํ”„์˜ ๋ฐ€๋„๊ฐ€ ๋†’๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ ํด ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ด ์š”์ฆ˜ GPU์˜ ์„ฑ๋Šฅ์œผ๋กœ ์ธํ•ด์„œ ๋งŽ์ด ๋ฐœ์ „๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๋‹ค.
  • ๊ฐ„์„ ๊ณผ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ตฌํ˜„

 

์ถœ์ฒ˜ : https://www.programiz.com/dsa/graph-adjacency-matrix

 

class Adjacency_Matrix {
    private boolean[][] adjMatrix;
    private int vertex;

    public Adjacency_Matrix(int vertex){
        adjMatrix = new boolean[vertex][vertex];
    }

    void addEdge(int i, int j){
        adjMatrix[i][j] = true;
        adjMatrix[j][i] = true;
    }

    void removeEdge(int i, int j){
        adjMatrix[i][j] = false;
        adjMatrix[j][i] = false;
    }
}

๋Œ“๊ธ€