Python_#10

hyena_leeยท2025๋…„ 10์›” 9์ผ

์ž๋ฃŒ๊ตฌ์กฐ

๋ชฉ๋ก ๋ณด๊ธฐ
13/15
post-thumbnail

๐Ÿ“ˆ ๊ทธ๋ž˜ํ”„

์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๊ณผ ์ •์ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ.
๊ทธ๋ž˜ํ”„๋Š” ์ •์ (vertex / node)๋“ค๊ณผ ๊ฐ„์„ (edge)๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ.
์ˆ˜์‹์œผ๋กœ๋Š” G = (V, E) ๋กœ ์“ฐ๋Š”๋ฐ, V๋Š” ์ •์ ๋“ค์˜ ์ง‘ํ•ฉ, E๋Š” ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ.
์˜ˆ์‹œ: ์‚ฌ๋žŒ๋“ค(์ •์ )๊ณผ ์นœ๊ตฌ๊ด€๊ณ„(๊ฐ„์„ ) โ†’ ์†Œ์…œ ๋„คํŠธ์›Œํฌ

โ€ผ๏ธํŠธ๋ฆฌ๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ ๋ฐฐ์› ๋˜ "๋น„์„ ํ˜• ๊ตฌ์กฐ" ?

๋น„์„ ํ˜• ๊ตฌ์กฐ๋Š” ํ‘œํ˜„์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๊ณ ,
์„ ํ˜•๊ตฌ์กฐ๋Š” ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๋Š” ๊ฒƒ์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๊ณ ,
๋น„์„ ํ˜•๊ตฌ์กฐ๋Š” ํ‘œํ˜„์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

์ด๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ๊ทธ๋ž˜ํ”„๋Š” ๋ฐ”๋กœ ์—ฐ๊ฒฐ ๊ด€๊ณ„์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

๐Ÿ‘‰ ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด ์ •๋ฆฌ

๋…ธ๋“œ(Node): ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ •์ (Vertex)์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ„์„ (Edge): ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•œ ์„ .
์ธ์ ‘ ๋…ธ๋“œ(Adjacent Node): ๊ฐ„์„ ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(๋˜๋Š” ์ •์ )

๊ทธ๋ž˜ํ”„๋Š” ์œ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์™€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ,
์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๐Ÿ“Š ๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜

  • ์œ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed Graph): ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ฐ„์„ ์„ ๊ฐ–๋Š”๋‹ค.A โ†’ B๋Š” B โ†’ A์™€ ๋‹ค๋ฆ„.
    ๊ฐ„์„ ์€ ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ ๊ฐ„์„ ์€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Undirected Graph)๋Š” ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ฐ„์„ ์„ ๊ฐ–๋Š”๋‹ค.A โ€” B๋Š” B โ€” A์™€ ๋™์ผ.

๐Ÿ“Š ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ๋ฒ•

๊ทธ๋ž˜ํ”„๋ผ๋Š” ๊ฐœ๋…์„ ์ปดํ“จํ„ฐ์—์„œ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค!

1) ์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Matrix): 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„
2) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(Adjacnecy List): ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„

          2 - 3      4. ....  9999999
          โŽœ       
      0 - 1

1. ์ด๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ, 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค!
  0  1  2  3
0 X  O  X  X
1 O  X  O  X
2 X  O  X  O
3 X  X  O  X

์ด๊ฑธ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค!
graph = [
    [False, True, False, False],
    [True, False, True, False],
    [False, True, False, True],
    [False, False, True, False]
]

์„œ๋กœ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€? ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ 
graph[1][2] -> O(1)

์–ผ๋งˆ๋‚˜ ๊ณต๊ฐ„์„ ์“ฐ๋ƒ?
O(N^2)


2. ์ด๋ฒˆ์—๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์„œ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ
graph[0] ์›์†Œ๋“ค์„ ๋‹ค ๋ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ O(N)
์–ผ๋งˆ๋‚˜ ๊ณต๊ฐ„์„ ์“ฐ๋ƒ?
O(N)

0 -> 1
1 -> 0 -> 2
2 -> 1 -> 3
3 -> 2

4 .... 


์ด๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค!
graph = {
    0: [1],
    1: [0, 2]
    2: [1, 3]
    3: [2]
}

๋ฐ”๋กœ ์‹œ๊ฐ„ VS ๊ณต๊ฐ„

  • ์ธ์ ‘ ํ–‰๋ ฌ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ฆ‰๊ฐ์ ์œผ๋กœ 0๊ณผ 1์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜, ๋ชจ๋“  ์กฐํ•ฉ์˜ ์—ฐ๊ฒฐ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(๋…ธ๋“œ2)O(๋…ธ๋“œ^2) ๋งŒํผ์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ฆ‰๊ฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ณ , ๊ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋Œ์•„๋ด์•ผ ํ•œ๋‹ค.

  • ๋”ฐ๋ผ์„œ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ์ตœ๋Œ€ O(๊ฐ„์„ )O(๊ฐ„์„ ) ๋งŒํผ์˜ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    ๋Œ€์‹  ๋ชจ๋“  ์กฐํ•ฉ์˜ ์—ฐ๊ฒฐ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ O(๋…ธ๋“œ+๊ฐ„์„ )O(๋…ธ๋“œ + ๊ฐ„์„ ) ๋งŒํผ์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

0๊ฐœ์˜ ๋Œ“๊ธ€