๐ Algorithm/Algorithm Note (10) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Union-find ์๊ณ ๋ฆฌ์ฆ (Disjoint Set), ์๋ก์ ์งํฉ Disjoint Set์ด๋? ์๋ก ์ค๋ณต๋์ง ์์ ๋ถ๋ถ ์งํฉ๋ค๋ก ๋๋์ด์ง ์์๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ํธ ๋ฐฐํ์ ์ธ ๋ถ๋ถ ์งํฉ๋ค๋ก ๋๋ ์ง ์์๋ค์ ๋ํ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํํ ์๋ก์ ์งํฉ ์๋ฃ๊ตฌ์กฐ ๋ผ๊ณ ๋ ํ๋ค. Union-Find ๋? Union-Find๋ ์๋ก์ ์งํฉ์ ํํํ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์งํฉ์ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ฑ์ ์ด์ฉํ ์ ์๋ค. ๊ทธ ์ค ๊ฐ์ฅ ํจ์จ์ ์ธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค. ๋ณดํต MST์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๋๋ค. ํธ๋ฆฌ๋ฅผ ์ด์ฉํ ์งํฉ์ ์ฒ๋ฆฌ - ๊ฐ์ ์งํฉ์ ์์๋ค์ ํ๋์ ํธ๋ฆฌ๋ก ๊ด๋ฆฌํ๋ค. (์์ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํด) - ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ ์งํฉ์ ๋ํ ์์๋ก ์ผ๋๋ค. Union-Find ์ฐ์ฐ Make-Set(x).. ์๊ณ ๋ฆฌ์ฆ - ์ ์ ์๊ณ ๋ฆฌ์ฆ (Meta Heuristic), ์ต์ ํด ์ฐพ๊ธฐ, ๊ธ๊ดด ๋ฌธ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ : Meta Heuristic ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ ๋ค์ํ ๋ฌธ์ ์ ๋ํด ๊ฒฝํ์ ์ผ๋ก ์๋ฃจ์ ์ ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ์ ์ฃผ์ด์ง ๋ฌธ์ ์ ๋ํด์ ์ต์ ์ ์๋ฃจ์ ์ ์ฐพ๋ ๊ฒ (์ฆ, ์ต์ ํด๋ฅผ ์ฐพ๋ ๊ฒ) ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ ํน์ฑ์ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ ์ค๋ช ์ด ๊ต์ฅํ ์ด๋ ค์. ๋ฌด์์์ฑ์ด ์กด์ฌํจ ์๋ฌผํ์์ ์๋ฌผ๋ค์ ์์กด ๋ฒ์น์ธ ์ ์์์กด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๊ณ ๋ฆฌ์ฆ ํ๊ฒฝ์ ์ ํฉํ ๊ฐ์ฒด๊ฐ ์ด์๋จ๋๋ค. ์ด์๋จ์ ๊ฐ์ฒด๋ ๋ฒ์์ ํ๋ค. ์ด์๋จ์ ๊ฐ์ฒด๋ ๊ฐ๊ฐ ๋ถ๋ชจ๊ฐ ๋์ด ์์์ ์์ฑํ๋๋ฐ, ์์์ ๋ถ์ ๋ชจ์ ์ ์ ์๋ฅผ ๋ฐ๊ณ ๋๋๋ก ๋์ฐ๋ณ์ด ์ ์ ์๋ฅผ ๋ฐ์ ๋ค์ ์ธ๋๋ฅผ ์ด์๊ฐ๋ค. → ์์ ์ธ ๊ฐ์ง๋ฅผ ๋ฐ๋ณตํ๋ฉด ํ๊ฒฝ์ ์ ํฉํ ๊ฐ์ฒด๋ค์ด ์ด์๋จ๊ณ ๊ทธ ๊ฐ์ฒด๋ค์ด ์ข์ ์๋ฃจ์ ์ ์ ์ํ๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ด๋ ์ฉ์ด์ ํํ - ๊ฐ์ฒด : individual .. Dynamic Programming(DP) ์๊ณ ๋ฆฌ์ฆ - ๋์ ํ๋ก๊ทธ๋๋ฐ, Python์ผ๋ก ํธ๋ ํผ๋ณด๋์น Dynamic Programming ํฐ ๋ฌธ์ ๋ฅผ ๋๋์ด ์์ ๋ฌธ์ ๋ก ํธ๋ ๊ฒ ํ๋์ ๋ฌธ์ ๋ ๋จ ํ ๋ฒ์ ํ์ด๋ง ํ๋ค. Dynamic Programming ๊ณผ Recursion(์ฌ๊ท)์ ์ฐจ์ด์ DP์ ์ฌ๊ท๋ ์ผํ๋ณด๋ฉด '๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ ์ ' ์์ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง, ํฐ ์ฐจ์ด์ ์ ์ผ๋ฐ์ ์ธ ์ฌ๊ท๋ฅผ ๋จ์ํ ์ฌ์ฉํ๋ฉด ๋์ผํ ์์ ๋ฌธ์ ๋ค์ด ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต ๋์ด ๋นํจ์จ์ ์ธ ๊ณ์ฐ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ฐ์ฅ ๋ํ์ ์ธ ์์๋ ํผ๋ณด๋์น ํจ์์ด๋ค. DP ์กฐ๊ฑด ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค. 1. ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ 2. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ ๋์ผํ ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋ ๋, ๊ฐ์ ๋ฌธ์ ๋ ํญ์ ์ ๋ต๋ ๊ฐ๋ค. ์ฆ, ์ค๋ณต ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. DP ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ ๋ชจ๋ ์์ ๋ฌธ์ ๋ ํ ๋ฒ.. ์๊ณ ๋ฆฌ์ฆ - Greedy (ํ์ ์๊ณ ๋ฆฌ์ฆ, ์์ฌ์์ด ์๊ณ ๋ฆฌ์ฆ), ์ต์ ํด ์ฐพ๊ธฐ Greedy Alogrithm Greedy๋ ์ฌ์ ์ ์ธ ์๋ฏธ๋ก 'ํ์์ค๋ฌ์ด', '์์ฌ๋ง์' ์ด๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค. ํ์ ์๊ณ ๋ฆฌ์ฆ ๋๋ ์์ฌ์์ด ์๊ณ ๋ฆฌ์ฆ ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. ๋ฏธ๋๋ฅผ ์๊ฐํ์ง ์๊ณ ์ ํ์ ์๊ฐ๋ง๋ค ๋น์ฅ ๋์์ ๋ณด์ด๋ ์ต์ ์ ์ ํ์ ํ๋ ๊ธฐ๋ฒ ๊ฐ ๋จ๊ณ์์ ์ต์ ์ ์ ํ์ ํ ๊ฒ์ด ์ ์ฒด์ ์ผ๋ก๋ ์ต์ ์ด๊ธธ ๋ฐ๋ผ๋ ์๊ณ ๋ฆฌ์ฆ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ ํ : ํ์ฌ ์ํ์์ ์ต์ ์ ํด๋ต ์ ํ ์ ์ ์ฑ ๊ฒ์ฌ : ์ ํ๋ ๋ต์ด ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ง ํ์ธ ํด๋ต ๊ฒ์ฌ : ์๋์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ๊ฒ์ฌํ๊ณ , ํด๊ฒฐ๋์ง ์์๋ค๋ฉด ์ ํ ์ ์ฐจ๋ก ๋์๊ฐ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์กฐ๊ฑด ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๊ธฐ ์ํด์๋ 2๊ฐ์ง ์กฐ๊ฑด์ ์ฑ๋ฆฝํด์ผ ํ๋ค. 1. ํ์์ ์ ํ ์์ฑ (Greedy Choice Prop.. ์๊ณ ๋ฆฌ์ฆ - Sort ์ ๋ ฌ (Merge sort, Quick sort), Python ์ฝ๋ Merge Sort (๋ณํฉ์ ๋ ฌ) - ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ์ ๋ ์ด ์ ๋ ฌ์ ์์ ์ ๋ ฌ์ ์ํ๋ฉฐ, ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ์ค์ ํ๋์ด๋ค. - ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ : ๋ฌธ์ ๋ฅผ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๋ค์, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต์ด๋ค. ๋๊ฐ ์ํํธ์ถ์ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค. - ํ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์, ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด๊ฐ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. - ๋ถํ (Divide): ์ ๋ ฅ ๋ฐฐ์ด์ ๊ฐ์ ํฌ๊ธฐ์ 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ ํ๋ค. - ์ ๋ณต(Conquer): ๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค. ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ ์์ง ์์ผ๋ฉด ์ํ ํธ์ถ ์ ์ด์ฉํ์ฌ ๋ค์ ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ค. - ๊ฒฐํฉ(Com.. ์๊ณ ๋ฆฌ์ฆ - Sort ์ ๋ ฌ (Selection sort, Insertion sort, Bubble sort), Python ์ฝ๋ Sort (์ ๋ ฌ) n๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ธฐ์ค์ ๋ง๊ฒ ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ์๊ณ ๋ฆฌ์ฆ Sort ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ Selection sort Insertion sort Bubble sort Merge sort Quick sort ๊ธฐ์ด์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ํ๊ท ์ ์ผ๋ก O(n^2)์ ์๊ฐ์ด ์์๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - Selection sort (์ ํ์ ๋ ฌ) - Insertion sort (์ฝ์ ์ ๋ ฌ) - Bubble sort (๋ฒ๋ธ์ ๋ ฌ) ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ํ๊ท ์ ์ผ๋ก O(nlogn)์ ์๊ฐ์ด ์์๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - Merge sort (๋ณํฉ์ ๋ ฌ) - Quick sort (ํต์ ๋ ฌ) - Heap sort (ํ์ ๋ ฌ) Selection sort (์ ํ์ ๋ ฌ) - ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - ํด๋น ์.. ์ด์ 1 2 ๋ค์