์๊ณ ๋ฆฌ์ฆ(15)
-
[์๊ณ ๋ฆฌ์ฆ] ์ต์ ์ ์ฅ ํธ๋ฆฌ - ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
์ ์ฅ ํธ๋ฆฌ(Spanning Tree) ์๋ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด์ ํธ๋ฆฌ์ ์์ฑ์ ๋ง์กฑํ๋ ๊ทธ๋ํ ์ ์ฅ ํธ๋ฆฌ์ ์กฐ๊ฑด ๋ณธ๋์ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํฌํจํด์ผ ํจ ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ ํธ๋ฆฌ์ ์์ฑ์ ๋ง์กฑ์ํด (์ฌ์ดํด์ด ์กด์ฌํ์ง ์์) ์ต์ ์ ์ฅ ํธ๋ฆฌ(Minimum Spanning Tree, MST) ๊ฐ๋ฅํ Spanning Tree ์ค์์, ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด ์ต์์ธ Spanning Tree๋ฅผ ์ง์นญํจ ์ต์ ์ ์ฅ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ๊ทธ๋ํ์์ ์ต์ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํจ ๋ํ์ ์ธ ์ต์ ์ ์ฅ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ Kruskal’s algorithm(ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ), Prim's algorithm(ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ) ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal's algorithm) ๋ชจ๋ ์ ์ ์ ๋ ๋ฆฝ์ ์ธ..
2021.06.09 -
[์๊ณ ๋ฆฌ์ฆ] ์ต์ ๋น์ฉ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๋ ๋ ๋ ธ๋๋ฅผ ์๋ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์๊ฐ์ค์น ๊ทธ๋ํ (Weighted Graph)์์ ๊ฐ์ (Edge)์ ๊ฐ์ค์น ํฉ์ด ์ต์๊ฐ ๋๋๋ก ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ชฉ์ ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ์ข ๋ฅ๋จ์ผ ์ถ๋ฐ ๋ฐ ๋จ์ผ ๋์ฐฉ(single-source and single-destination shortest path problem) ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๊ทธ๋ํ ๋ด์ ํน์ ๋ ธ๋ u์์ ์ถ๋ฐํด์ ๋ ๋ค๋ฅธ ํน์ ๋ ธ๋ v์ ๋์ฐฉํ๋ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋จ์ผ ์ถ๋ฐ(single-source shortest path problem) ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๊ทธ๋ํ ๋ด์ ํน์ ๋ ธ๋ u์ ๊ทธ๋ํ ๋ด ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋ ๊ฐ๊ฐ์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํด๋น์ ์ฒด ์(all-pair) ์ต๋จ ๊ฒฝ๋ก๊ทธ๋..
2021.06.07 -
[์๊ณ ๋ฆฌ์ฆ] #7 ํ์ ์๊ณ ๋ฆฌ์ฆ
** ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy algorithm) ์ต์ ์ ํด์ ๊ฐ๊น์ด ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ์ฉ๋จ ์ฌ๋ฌ ๊ฒฝ์ฐ ์ค ํ๋๋ฅผ ๊ฒฐ์ ํด์ผํ ๋๋ง๋ค, ๋งค์๊ฐ ์ต์ ์ด๋ผ๊ณ ์๊ฐ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์งํํด์, ์ต์ข ์ ์ธ ๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ ์ผ์ข ์ ์ ๋ต ** ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ 1) ๋์ ๋ฌธ์ ์ง๋ถํด์ผ ํ๋ ๊ฐ์ด 4720์ ์ผ ๋ 1์ 50์ 100์, 500์ ๋์ ์ผ๋ก ๋์ ์ ์๊ฐ ๊ฐ์ฅ ์ ๊ฒ ์ง๋ถํ์์ค. ๊ฐ์ฅ ํฐ ๋์ ๋ถํฐ ์ต๋ํ ์ง๋ถํด์ผ ํ๋ ๊ฐ์ ์ฑ์ฐ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋งค์๊ฐ ์ต์ ์ด๋ผ๊ณ ์๊ฐ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ํํ๋ฉด ๋จ coin_list = [500, 100, 50, 1] def min_coin_count(value, coin_list): total_coin_count = 0 d..
2021.06.05 -
[์๊ณ ๋ฆฌ์ฆ] #6_3 DFS
** DFS ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์๋ฃ๊ตฌ์กฐ ์คํ๊ณผ ํ๋ฅผ ํ์ฉํจ need_visit ์คํ๊ณผ visited ํ, ๋ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์์ฑ BFS ์๋ฃ๊ตฌ์กฐ๋ ๋ ๊ฐ์ ํ๋ฅผ ํ์ฉํ๋๋ฐ ๋ฐํด, DFS ๋ ์คํ๊ณผ ํ๋ฅผ ํ์ฉํ๋ค๋ ์ฐจ์ด๊ฐ ์์์ ์ธ์งํด์ผ ํจ ํ์ ์คํ ๊ตฌํ์ ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ์๋ ์์ง๋ง, ๊ฐ๋จํ ํ์ด์ฌ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ ์๋ ์์ def dfs(graph, start_node): visited, need_visit = list(), list() need_visit.append(start_node) while need_visit: node = need_visit.pop() # BFS์ ์ฐจ์ด: ์คํ ์ ์ฑ if node not in visited: visited.append(node) need_visit..
2021.06.05 -
[์๊ณ ๋ฆฌ์ฆ] #6_2 BFS
** BFS์ DFS ๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ๋๋น ์ฐ์ ํ์ (Breadth First Search): ์ ์ ๋ค๊ณผ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋๋ค (ํ์ ๋ ธ๋๋ค)์ ๋จผ์ ํ์ํ๋ ๋ฐฉ์ ๊น์ด ์ฐ์ ํ์ (Depth First Search): ์ ์ ์ ์์๋ค์ ๋จผ์ ํ์ํ๋ ๋ฐฉ์ ** BFS/DFS ๋ฐฉ์ ์ดํด๋ฅผ ์ํ ์์ BFS ๋ฐฉ์: A - B - C - D - G - H - I - E - F - J ํ ๋จ๊ณ์ฉ ๋ด๋ ค๊ฐ๋ฉด์, ํด๋น ๋ ธ๋์ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋๋ค (ํ์ ๋ ธ๋๋ค)์ ๋จผ์ ์ํํจ DFS ๋ฐฉ์: A - B - D - E - F - C - G - H - I - J ํ ๋ ธ๋์ ์์์ ํ๊ณ ๋๊น์ง ์ํํ ํ, ๋ค์ ๋์์์ ๋ค๋ฅธ ํ์ ๋ค์ ์์์ ํ๊ณ ๋ด๋ ค๊ฐ๋ฉฐ ์ํํจ ** ํ์ด์ฌ์ผ๋ก ๊ทธ๋ํ๋ฅผ ํํ ํ์ด์ฌ์์..
2021.06.05 -
[์๊ณ ๋ฆฌ์ฆ] #6_1 ๊ทธ๋ํ
** ๊ทธ๋ํ(Graph) ์ค์ ์ธ๊ณ์ ํ์์ด๋ ์ฌ๋ฌผ์ ๋ ธ๋์ ๊ฐ์ ์ผ๋ก ํํ ** ๊ทธ๋ํ ๊ด๋ จ ์ฉ์ด ๋ ธ๋ (Node): ์์น (= ์ ์ , Vertex) ๊ฐ์ (Edgd): ์์น ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ํ ์ , ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ ์ (= Link, Branch) ์ธ์ ์ ์ (Adjacent Vertex): ๊ฐ์ ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ฐธ๊ณ ์ฉ์ด ์ ์ ์ ์ฐจ์ (Degree): ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ ์ ์ง์ ์ฐจ์ (In-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ์์ ์ค๋ ๊ฐ์ ์ ์ ์ง์ถ ์ฐจ์ (Out-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ๋ก ํฅํ๋ ๊ฐ์ ์ ์ ๊ฒฝ๋ก ๊ธธ์ด (Path Length): ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๊ฐ์ ์ ์ ๋จ์ ๊ฒฝ๋ก (Simple Path): ์ฒ์ ์ ์ ๊ณผ ๋ ์ ์ ์ ์ ์ธํ๊ณ ์ค๋ณต..
2021.06.04