Graph

1. Graph ๋ž€?

์ •์ (Vertext, Node) ๊ณผ ๊ฐ„์„ (Edge) ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ

์˜ˆ : ๋„์‹œ(์ •์ ) ์™€ ๋„๋กœ(๊ฐ„์„ ), ์‚ฌ๋žŒ(์ •์ ) ๊ณผ ์นœ๊ตฌ ๊ด€๊ณ„(๊ฐ„์„ ), ์„œ๋ฒ„(์žฅ์ )์™€ ์—ฐ๊ฒฐ(๊ฐ„์„ ) ๋“ฑ

์˜ˆ์‹œ :

์ •์ : A, B, C, D  
๊ฐ„์„ : A-B, A-C, B-D 

โ‡’ ์‹œ๊ฐํ™” :

A --- B
|     |
C     D

2. Graph ์˜ ์ข…๋ฅ˜

๋ถ„๋ฅ˜ ๊ธฐ์ค€
์œ ํ˜•
์„ค๋ช…

๋ฐฉํ–ฅ์„ฑ

๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์ด ์–‘๋ฐฉํ–ฅ (A-B = B-A)

๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์ด ๋‹จ๋ฐฉํ–ฅ (Aโ†’B)

๊ฐ„์„  ๊ฐ€์ค‘์น˜

๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์— ๋น„์šฉ/๊ฑฐ๋ฆฌ ๋“ฑ์ด ์žˆ์Œ

๋น„๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์— ๋น„์šฉ ์—†์Œ

์ž๊ธฐ ๊ฐ„์„ 

๋ฃจํ”„ ๊ทธ๋ž˜ํ”„

์ •์ ์ด ์ž๊ธฐ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์ด ์žˆ์Œ

์ค‘๋ณต ๊ฐ„์„ 

๋ฉ€ํ‹ฐ ๊ทธ๋ž˜ํ”„

์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐ„์„  ํ—ˆ์šฉ

์—ฐ๊ฒฐ์„ฑ

์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„

๋ชจ๋“  ์ •์ ์ด ์ด์–ด์ง

์ˆœํ™˜์„ฑ

์‚ฌ์ดํด ๊ทธ๋ž˜ํ”„

์ˆœํ™˜(์‚ฌ์ดํด)์ด ์กด์žฌ


3. Graph ํ‘œํ˜„ ๋ฐฉ๋ฒ•

1) ์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Matrix)

  • 2์ฐจ์› ๋ฐฐ์—ด ์‚ฌ์šฉ : graph[i][j] == 1 โ‡’ i ์—์„œ j ๋กœ ๊ฐ„์„  ์กด์žฌ

  • ๋ฉ”๋ชจ๋ฆฌ: O(N^2)

  • ์žฅ์  : ๊ฐ„์„  ์—ฌ๋ถ€ ์ฆ‰์‹œ ํ™•์ธ

  • ๋‹จ์  : ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•จ(ํฌ์†Œ ๊ทธ๋ž˜ํ”„์— ๋น„ํšจ์œจ์ )

int[][] graph = new int[N + 1][N + 1];
graph[1][2] = 1;
graph[2][3] = 1;

2) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(Adjacency List)

  • List<List<Integer>> ํ˜•ํƒœ๋กœ ํ‘œํ˜„

  • ๋ฉ”๋ชจ๋ฆฌ : O(V + E) (๊ณต๊ฐ„ ํšจ์œจ ๋†’์Œ)

  • ์žฅ์  : ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ˆœํšŒ์— ์ ํ•ฉ

  • ๋‹จ์  : ๊ฐ„์„  ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ์ด ๋А๋ฆด ์ˆ˜ ์žˆ์Œ.

List<List<Integer>> graph = new ArrayList<>();

for(int i = 0; i <= N; i++) {
    graph.add(new ArrayList<>());
}

graph.get(1).add(2);
graph.get(2).add(3);

์‹ค๋ฌด๋‚˜ ์ฝ”ํ…Œ์—์„œ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ + ์šฐ์„ ์ˆœ์œ„ ํ(PriorityQueue) ์กฐํ•ฉ์ด ๊ฐ€์žฅ ํ”ํ•จ.


4. ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

์šฉ์–ด
์˜๋ฏธ

Vertex (์ •์ )

๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ

Edge (๊ฐ„์„ )

๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ

Degree (์ฐจ์ˆ˜)

์ •์ ์— ์—ฐ๊ฒฐ๋œ ๊ฐ„์„  ์ˆ˜

In-degree / Out-degree

๋“ค์–ด์˜ค๋Š” / ๋‚˜๊ฐ€๋Š” ๊ฐ„์„  ์ˆ˜ (๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ)

Path (๊ฒฝ๋กœ)

๋‘ ์ •์  ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์˜ ์ˆœ์„œ

Cycle (์‚ฌ์ดํด)

์‹œ์ž‘์ ๊ณผ ๋์ ์ด ๊ฐ™์€ ๊ฒฝ๋กœ

Connected

์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€

Weight (๊ฐ€์ค‘์น˜)

๊ฐ„์„ ์˜ ๊ฑฐ๋ฆฌ, ๋น„์šฉ, ์‹œ๊ฐ„ ๋“ฑ


5. Graph ์•Œ๊ณ ๋ฆฌ์ฆ˜

โœ… ํƒ์ƒ‰

  • DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

  • BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)

โœ… ์ตœ๋‹จ ๊ฒฝ๋กœ

  • Dijkstra (๋‹ค์ต์ŠคํŠธ๋ผ)

  • Bellman-Ford (์Œ์ˆ˜ ํ—ˆ์šฉ)

  • Floyd-Warshall (๋ชจ๋“  ์Œ ๊ฐ„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ)

โœ… ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ

  • Kruskal

  • Prim

โœ… ์œ„์ƒ ์ •๋ ฌ

  • DAG(๋ฐฉํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์—์„œ ๋…ธ๋“œ ์ˆœ์„œ ์ •๋ ฌ

โœ… ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ (Disjoint Set)

  • ์„œ๋กœ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ์—ฐ๊ฒฐ ์—ฌ๋ถ€ ํ™•์ธ (์‚ฌ์ดํด ํƒ์ง€)


6. Graph ๋Š” ์–ด๋””์— ์“ฐ์ž„?

  • ์ง€๋„ / ๋„ค๋น„๊ฒŒ์ด์…˜ : ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ, ์ตœ๋‹จ ๊ฒฝ๋กœ

  • SNS : ์นœ๊ตฌ ์ถ”์ฒœ, ์—ฐ๊ฒฐ๋œ ๊ทธ๋ฃน ์ฐพ๊ธฐ

  • ๋„คํŠธ์›Œํฌ : ๋ผ์šฐํŒ…, ํšŒ์„  ์ตœ์†Œํ™”

  • ๊ฒŒ์ž„ : ์ด๋™ ๊ฐ€๋Šฅ ์˜์—ญ, ํผ์ฆ ํƒ์ƒ‰

  • ์Šค์ผ€์ค„๋ง : ์ž‘์—… ์ˆœ์„œ(์œ„์ƒ ์ •๋ ฌ)

  • AI : ์ƒํƒœ ๊ณต๊ฐ„ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ๊ฒฝ๋กœ ํƒ์ƒ‰

Last updated

Was this helpful?