[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋๋น ์ฐ์ ํ์(BFS)
Breadth-First Search
๋๋น ์ฐ์ ํ์์ผ๋ก๋ ๋ถ๋ฆฌ๋ BFS ์ญ์ ๊ทธ๋ํ๋ฅผ ํ์ํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. DFS๋ ํ ๋ ธ๋์ ๋ํด์ ์ ์ผ ๊น์ํ ์์น์ ์๋ ๋ ๋ฒจ๊น์ง ๋ด๋ ค๊ฐ ํ์ํ์ง๋ง BFS๋ ํ ๋ ๋ฒจ์ ์๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค ํ์ํ๊ณ ๋ค์ ๋ ๋ฒจ๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์์ ์งํํ๋ค. BFS๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ณ queue ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
Algorithm Steps
Node State
์ด๋ฒ ๊ฐ์์์ ์ค๋ช ํ BFS๋ ์๊น์ ํตํด์ ๊ฐ ๋ ธ๋์ ์ํ๋ฅผ ํํํ๊ฒ ๋๋ค.
- White : ์ฒ์ ๋ฐ๊ฒฌ๋ ๋ ธ๋
- Gray : ๋ฐ๊ฒฌ์ ๋์์ง๋ง ์์ง ํด๋น ๋ ธ๋์ ์ด์๋ ธ๋๋ค์ด ๋ชจ๋ ํ์๋์ง๋ ์์ ๋ ธ๋
- 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๋ฅผ ๋นผ๋ด์ด์ ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๋ค. ์ด๋ ํ์ฝ์ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ ธ๋๋ง ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ ๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ํด์ค๋ค.
- ํ์์ผ๋ก ์น ํ๊ธฐ
- ํ์ฌ distance + 1 ์ distance ๋ก ์ ํ๊ธฐ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ธฐ๋กํ๊ธฐ
- ํ์ ์ง์ด๋ฃ๊ธฐ
์ ๊ทธ๋ฆผ์์๋ 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๋ฅผ ์งํํ๋๋ฐ ํ์ํ ์๊ฐ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฐ ๋ ธ๋๋ฅผ enqueue ํ๋ ์๊ฐ, ์ฆ white ์ํ์ธ ๋ ธ๋๋ฅผ gray๋ก ๋ฐ๊พธ๋ ์๊ฐ : ๐ฉ(V)
- ๊ฐ ๋ ธ๋๋ฅผ dequeue ํ๋ ์๊ฐ, ์ฆ gray ์ํ์ธ ๋ ธ๋๋ฅผ black์ผ๋ก ๋ฐ๊พธ๋ ์๊ฐ : ๐ฉ(V)
- Ajacency List ๋ฅผ ํตํด์ ์ธ์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ํ๋ ์๊ฐ : ๐ฉ(E)
๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ์ ๐ฉ(V + E) ๊ฐ ๋๋ค.
'๐ฎ ์จ-์์ค > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊ฐํ ์ฐ๊ฒฐ ์์(Strongly Connected Component) (0) | 2021.07.18 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊น์ด ์ฐ์ ํ์(DFS) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๋ฐฐ๋ญ ๋ฌธ์ (Knapsack Problem) (7) | 2021.07.17 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํํ๋ง ์ฝ๋(Huffman Code Problem) (0) | 2021.07.17 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Alogorithm) (0) | 2021.07.17 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote