๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

Breadth-First Search

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ๋„ ๋ถˆ๋ฆฌ๋Š” BFS ์—ญ์‹œ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. DFS๋Š” ํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์ œ์ผ ๊นŠ์ˆ™ํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋ ˆ๋ฒจ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€ ํƒ์ƒ‰ํ•˜์ง€๋งŒ BFS๋Š” ํ•œ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ํƒ์ƒ‰ํ•˜๊ณ  ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. BFS๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋ฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ณ  queue ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

Algorithm Steps

Node State

์ด๋ฒˆ ๊ฐ•์˜์—์„œ ์„ค๋ช…ํ•œ BFS๋Š” ์ƒ‰๊น”์„ ํ†ตํ•ด์„œ ๊ฐ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

  1. White : ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๋…ธ๋“œ
  2. Gray : ๋ฐœ๊ฒฌ์€ ๋˜์—ˆ์ง€๋งŒ ์•„์ง ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ด์›ƒ๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ ํƒ์ƒ‰๋˜์ง€๋Š” ์•Š์€ ๋…ธ๋“œ
  3. Black : ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ด์›ƒ๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ ๋ฐฉ๋ฌธ๋œ ๋…ธ๋“œ

Distance

๊ฐ ๋ ˆ๋ฒจ, ํ˜น์€ depth ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ distance ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์€ ๊ฐ™์€ distance ๋ฅผ ๊ฐ™๊ฒŒ๋˜๊ณ , distance ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ์–ผ๋งŒํผ์˜ edge๊ฐ€ ๋–จ์–ด์ ธ์žˆ๋Š”์ง€๋ฅผ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

Pseudo Code

BFS(G, s)
    for each vertex u in V - {s}
        do d[u] = INFINITE
        predecessor(u) = null
    color[u] = gray
    d[s] = 0
    parent[u] = null
    Q = null;

    ENQUEUE (Q, s)
    while Q is not empty
        do u = dequeue (Q)
            for each v in adj[u]
                do if color[v] = white
                    then color[v] = gray
                        d[v] = d[u] + 1
                        predecessor(v) = u
                        ENQUEUE(Q, v)
        color[u] = black

์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด๋ณด์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๋‹จ์ˆœํ•œ ์ฝ”๋“œ์ด๋‹ค. BFS ํ•จ์ˆ˜์—์„œ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ์ตœ๊ธฐํ™” ํ•ด์ฃผ๊ณ  ์ „๋‹ฌ๋œ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์„ธํŒ…ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ENQUEUE ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋งˆํ‚นํ•˜๋ฉฐ ์ˆœํšŒํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ํ•œ๋ฒˆ ์ดํ•ดํ•ด๋ณด์ž.

Example

์œ„์™€ ๊ฐ™์ด ํ์™€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ bfs ์˜ ์‹œ์ž‘๋…ธ๋“œ๋กœ B๋ฅผ ์ง€์ •ํ•ด ์ฃผ์—ˆ๋‹ค๊ณ  ํ•˜์ž.

 

 

์ฒซ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์ƒํƒœ์ธ gray๋กœ ๋งŒ๋“ค๊ณ  ํ์— enqueue ํ•ด์ค€๋‹ค . ์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ pseudo code ์—์„œ while ๋ฌธ ๋ฐ”๋กœ ์•ž๊นŒ์ง€์˜ ๊ณผ์ •์ด๋‹ค.

 

 

์ด์ œ ํ์— ๋“ค์–ด๊ฐ„ B๋ฅผ ๋นผ๋‚ด์–ด์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ๋ฐฉ๋ฌธํ•œ๋‹ค. ์ด๋•Œ ํ•œ์•ฝ์ƒ‰ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธํ•˜๊ณ , ๋ฐฉ๋ฌธํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ํ•ด์ค€๋‹ค.

  1. ํšŒ์ƒ‰์œผ๋กœ ์น ํ•˜๊ธฐ
  2. ํ˜„์žฌ distance + 1 ์„ distance ๋กœ ์ •ํ•˜๊ธฐ
  3. ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ
  4. ํ์— ์ง‘์–ด๋„ฃ๊ธฐ

์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” A ๋…ธ๋“œ์™€ F๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์— ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ ค๋‘์—ˆ์ง€๋งŒ ์‚ฌ์‹ค A๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ์— A๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

์ด์ œ B์— ํ•ด๋‹นํ•˜๋Š” ํฐ์ƒ‰ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ๋” ์ด์ƒ ์—†๊ธฐ ๋•Œ๋ฌธ์— B ๋…ธ๋“œ๋Š” ๊ฒ€์€์ƒ‰์œผ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while ๋ฌธ์€ ๋‹ค์‹œ ๋ฐ˜๋ณต๋œ๋‹ค.

 

 

ํ์— ๋“ค์–ด์žˆ๋˜ A๋ฅผ dequeue ํ•ด์„œ ๋˜‘๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋•Œ, A๋Š” B์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ B๋Š” ์ด๋ฏธ ๊ฒ€์€์ƒ‰์œผ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— A๊ฐ€ ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๋Š” E ๋ฟ์ด๋‹ค. E์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ํ์— ๋„ฃ์–ด์ค€๋‹ค.

 

 

์ด๋ฒˆ์—” F๋ฅผ dequeue ํ•˜๊ณ  ์ธ์ ‘๋…ธ๋“œ๋“ค์„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. ๊ทธ๋ฆผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ distance๊ฐ€ 1์ธ ๋…ธ๋“œ๋“ค์˜ ํƒ์ƒ‰์ด ๋ชจ๋‘ ๋๋‚ฌ๋‹ค. ์ฆ‰ ๋ ˆ๋ฒจ 1์— ์žˆ๋˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚œ ๊ฒƒ์ด๋‹ค.

 

์œ„ ์ž‘์—…์„ ๊ณ„์† ๋ฐ˜๋ณตํ•ด๋ณด๋ฉด,

 

 

๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ while ๋ฌธ์— ์˜ํ•ด ์ง„ํ–‰๋œ๋‹ค. ์ด์ œ ํ์— ๋“ค์–ด์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— while ๋ฌธ์€ ์ข…๋ฃ“๋˜๊ณ  BFS๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.

Algorithm Analysis

BFS๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ฐ ๋…ธ๋“œ๋ฅผ enqueue ํ•˜๋Š” ์‹œ๊ฐ„, ์ฆ‰ white ์ƒํƒœ์ธ ๋…ธ๋“œ๋ฅผ gray๋กœ ๋ฐ”๊พธ๋Š” ์‹œ๊ฐ„ : ๐›ฉ(V)
  2. ๊ฐ ๋…ธ๋“œ๋ฅผ dequeue ํ•˜๋Š” ์‹œ๊ฐ„, ์ฆ‰ gray ์ƒํƒœ์ธ ๋…ธ๋“œ๋ฅผ black์œผ๋กœ ๋ฐ”๊พธ๋Š” ์‹œ๊ฐ„ : ๐›ฉ(V)
  3. Ajacency List ๋ฅผ ํ†ตํ•ด์„œ ์ธ์ ‘๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„ : ๐›ฉ(E)

๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„์€ ๐›ฉ(V + E) ๊ฐ€ ๋œ๋‹ค.