"๋ฒจ๋ง ํฌ๋(bellman-ford) ์๊ณ ๋ฆฌ์ฆ " ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ด ๋ง์ ์๋ ๋ค. =3= ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ํ์ ๋ฒ์น์ ๋ณด๋ฉด ๋ฐ๊ฒฌํ ์ฌ๋๋ค์ ์ด๋ฆ์ผ๋ก ์ด๋ฆ์ ๋ง๋ ๋ค. ์ง๊ด์ ์ด์ง ์์์ ๊ณ์ ๊น๋จน๊ฒ ๋๋ค. ์ง๊ด์ ์ผ๋ก ์ด๋ฆ์ ์ง์ด์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค. ์๋ฅผ ๋ค์ด, "์์์ฌ์ดํด ๋ค์ต์คํธ๋ผ" ์ด๋ฐ์์ผ๋ก ~ 1. ์ต๋จ ๊ฒฝ๋ก ํธ๋ฆฌ (shortest-path tree), ์ต์ ํด ๊ตฌ์กฐ(optimal substructure ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ต์ ์ฌ๋ฌ๊ฐ๊ฐ ์กด์ฌ ํ ์ ์์ผ๋ฉด ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค. 2. ์์ ์ฌ์ดํด์ ์ ๋ฌด๋ฅผ ํ์ธํ ์ ์๋ค. ๋ค์ต์คํธ๋ผ๋ ๋ค๋ฅธ ์ !!์ผ๋ก ์์ ์ฌ์ดํด์ ๋ฐ์์ผ๋ก ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋ฌดํ์ผ๋ก ๋น ์ง๋ ์์์ฐจ์ดํด์ ์ฐพ๋๋ค. 3. ๋ชจ๋ ์์ ๊ฐ์ ์ด ๋ฌธ์ ๋ค ? ์๋๋ค. (-) ๋ง์ด๋์ค ๊ฐ์ด ์๋..
" Algorithm/ KMP ์๊ณ ๋ฆฌ์ฆ " ๐ธ KMP( Knuth, Morris, Prett ) Algorithm? ๋ํ์ ์ธ ์์์๊ฐ ๋ด์ ํ ์ ์๋ ๋ฌธ์์ด ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ช ์นญ์ ์๊ณ ๋ฆฌ์ฆ ์ฐ์์์ ์๊ด์์ด ๋ง๋ ์ฌ๋์ด๋ฆ์ด๋ค. ๋ฌธ์์ด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ถ๋ฅด๋๊ฒ(?) ๋ ์ข์๊ฑฐ ๊ฐ๋ค. ๐ธ ํด๋ตhttps://www.acmicpc.net/problem/1786"baekjoon 1786๋ฒ - ์ฐพ๊ธฐ"์ ํจ๊ป kmp ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๊ณ ํ์ด๋ณด์. P: ํจํด(๊ธธ์ด: m) T: ํ ์คํธ(๊ธธ์ด: n) ๋ง์ฝ ๋ชจ๋ ๋งค์นญ์ ํ๋ํ๋ ํ์ธํ๋ค๋ฉด? (n - m + 1) x m = ์๊ฐ ๋ณต์ก๋ O(nm)๋ชฉํ: ์๊ฐ ๋ชฉ์ก๋ O(n) ๋ง๋ค๊ธฐ. ๐ฅ step 1. ์ฐพ์ผ๋ ค๋ ๋ฌธ์์ด ์ ์ฒ๋ฆฌ ๊ณผ์ ๊ฑฐ์น๊ธฐ ์ ๋์ฌ(์ด์ ์ : ๆฅ..
' binary search & lower bound & upper bound ' ์ฝ๋ฉ ํ ์คํธ๋ฅผ ํ๋ค๋ณด๋ฉด ์ด๋ถ ํ์์ ์์ฃผํ๊ฒ ๋๋ค. ๋๋ถ๋ถ ๋ด์ฅํจ์๋ก ์ฌ์ฉํ๋ฉด ๋์ง๋ง, ๋ฌธ์ ์ข ๋ฅ์ ๋ฐ๋ผ์ ์ง์ ๊ตฌํํด ์กฐ๊ฑด์ ๋ํด์ผ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. c++ ๊ธฐ์ค์ผ๋ก ์ด์ง ํ์ ํจ์๋ ์ด 3๊ฐ์ง๊ฐ ์๋ค. ์ด ์ธ๊ฐ์ง ๋ชจ๋ ์ด์ง ํ์์ด ๊ธฐ๋ฐ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋์ด ์์ด์ผ ํ๋ค. 1. [ #include ] std::binary_searchval๊ฐ์ด ์๋์ง ์๋์ง ํ์ธํ๋ ์๊ณ ๋ฆฌ์ฆ [ return bool ] std::lower_bound๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ ์๊ณ ๋ฆฌ์ฆ. 2. [ #include ] std::lower_bound val๊ฐ์ ์์ ์์น๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ 3. [ #include..
๊ณต๋ถ ์ Tmi.๋งค์ผ ์ผ ์ง ์ผ ์ง ํ๋ ๊พธ๋ฏธ๋ ๋ ๋ ์๊ณ ๋๋ฅผ ๋๋ฌด ๋์ถฉ๋์ถฉ ์ด๊ฒ ๋๋ ๊ฑฐ ๊ฐ์์ ํํ๊ฐ ์ต๋๋ค. ์ท๋ ๊ฐ๋ฐฉ๋ ํ์ฅํ๋ ์ ์ฐ ์ง ์ค๋ ๋ ๊ฑฐ ๊ฐ์์. ๋๋ฅผ ์ํ ์๋น๋ ์์ด ๊ทธ๋ฅ ๋จน๊ณ ์๊ณ ์ผํฉ๋๋ค. ์ด๋ ๊ฒ ์ด๋ฉด ์ข์๊น? ๋ผ๋ ์๊ฐ์ด ์ข ์ข ๋ญ๋๋ค. ์ ์ด๊ณ ์๋๊ฑด ์๋๊ฑฐ ๊ฐ์ฃ ? ใ ใ ๊ณต๋ถ๋ ์กฐ๊ธ ์ฌ์์ด์. ๋์ ์๋๋ก ๊ณต๋ถํ๋ ค๊ณ ํ๋๋ฐ ๋จ๋ค์ ์๋๋ฅผ ๋ณด๊ณ ๋ถ์ํจ์ ๋๋ผ๋ฉด์ ์ฐ์ธ๊ฐ์ ์ฌ๋ ๊ฒ…? ์ฐธ ์์ด๋ฌ๋ํฉ๋๋ค. (ํ์ฌ..) ๋ฐฑ์ค ๋๋์ด 200๊ฐ ๋ํํ์ต๋๋ค. ์์ง ์ ์ ์์ง๋ง ์ด๋ฒ ์ฐ๋์ 500๊ฐ๋ ๋๊ณ ์ถ๋ค์. ์ง๊ธ์ ์ ๋ง ํธ๋ ๋ฐ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์ด์ ์ ํ์๋ ๊ฑฐ์ ๋น์ทํ ๋ฌธ์ ์ฌ๋ ํค๋งค๋๋ฐ ๊ทธ๋ฌ์ง ์์ ๋ ์ด ์ฌ๊น์? ํ์ฌ ๊ณจ๋ 2 ์ ๋๋ค. ๋ฐฑ์ค์ด ํ๋ ๋๋์ด ๋๋ ๋ ํ ๋ฒ ๋ Tm..
Sparse Table (์คํ์ค ํ ์ด๋ธ) ํน์ง ๋ฐฉํฅ ๊ทธ๋ํ ์ ๋๋ค.๋ชจ๋ ์ ์ด ๋ชฉ์ ์ง๊ฐ ์์ต๋๋ค.๊ทธ ์ ์ ํ๊ณ ์๋ก์ด ์ ์ผ๋ก ๊ฐ๋๋ค.2์ ์ ๊ณฑ๊ทผ์ผ๋ก ๋์ฐฉํ ์ ์ ์ ์ฅํฉ๋๋ค. (1๋ฒ, 2๋ฒ, 4๋ฒ, 8๋ฒ ์ด๋์ ๋ํ ๋ฐฐ์ด์ ๋ชจ๋ ์ ์ฅํฉ๋๋ค.) ์์ ๋ฅผ ํ๋ฉด์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. https://www.acmicpc.net/problem/17435 17435๋ฒ: ํฉ์ฑํจ์์ ์ฟผ๋ฆฌํจ์ f : {1, 2, ..., m}→{1, 2, ..., m}์ด ์๋ค. ์ด๋ fn : {1, 2, ..., m}→{1, 2, ..., m}์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ์. f1(x) = f(x) fn+1(x) = f(fn(x)) ์๋ฅผ ๋ค์ด f4(1) = f(f(f(f(1))))์ด๋ค. n๊ณผ x๊ฐ ์ฃผ์ด์ง ๋ fn(x)๋ฅผ ๊ณ์ฐํ๋www.acmicpc.n..
์คํฐ๋์์ A* ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ฒ ์์ฑํด๋ณด๊ณ ๊ฐ๋จํ๊ฒ ์ฝ์๋ก ๋์ด๋ณด๊ณ .. ์ ๋ํฐ๋ก ์ ์ฉํด๋ณด๊ธฐ๋ก ํ์๋ค. ์ ๋ํฐ๋ก ์ฎ๊ธฐ๋ ์์ ๋ฒ์จ๋ถํฐ ๊ฑฑ์ ์ด ๋๋ค. ์ผ๋จ A*์๊ณ ๋ฆฌ์ฆ์ด ๋ญ์ง ์ ๋ฆฌ๋ฅผ ํด๋ณด์ ..A* ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฅํ์ฌ ๋ง๋ค์ด์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฃผ์ด์ง ์ถ๋ฐ ๊ผญ์ง์ ์์๋ถํฐ ๋ชฉํ ๊ผญ์ง์ ๊น์ง ๊ฐ๋ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ด๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์ด๋ค. ์ฃผ๋ก ๊ฒ์์์ ๋ชฌ์คํฐ๊ฐ ํ๋ ์ด์ด๋ฅผ ๋ชฉํ์ง์ ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์๋ ์ฌ๋ฅ ๊ฒ์์์ ํ๋ ์ด์ด๊ฐ ํ๊ฒ(๋ชฌ์คํฐ๋ ๋ค๋ฅธ PC)์ ํฅํด ์ด๋์ํฌ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์๊ณ ๋ฆฌ์ฆ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ A* ์๊ณ ๋ฆฌ์ฆ๋ชฉํ์ ์์์ -> ๋๋จธ์ง ๋ชจ๋ ์ ์ ๋ค๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ์์์ -> ๋ชฉํ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ์ฐจํ ๊ฒฝ๋ก ๋์ถ์ ์ํ ํจ์f(n)ํ์ฌ ๋ ธ๋์์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ..
ํ๋ฆผ(Prim) ์๊ณ ๋ฆฌ์ฆ1. ๊ทธ๋ํ์์ ์์์ ์ ์ ํ๋ค - (์ด๋ค ๋ ธ๋์ด์ด๋ ์๊ด์์)2. ์ ํํ ์ ์ ๊ณผ ์ธ์ ํ๋ ์ ์ ๋ค ์ค ์ต์ ๋น์ฉ์ธ ๊ฐ์ ์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํํ๋ค.3. ๋ชจ๋ ์ ์ ์ด ์ ํ๋ ๋๊น์ง 1,2๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.โป ํ๋ฆผ์ ์์์ ์ ์ ํ๊ณ , ์์์ ์์ ๊ฐ๊น์ด ์ ์ ์ ์ ํํ๋ฉด์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์ฌ์ดํด์ ์ด๋ฃจ์ง ์์ง๋ง ํฌ๋ฃจ์ค์นผ์ ์์์ ์ ๋ฐ๋ก ์ ํ์ง ์๊ณ ์ ๋ ฌ ํ ๊ฐ์ฅ ์ต์ ๋น์ฉ์ผ๋ก ๊ฐ์ ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด์ด ๋ฐ์ํ๋์ง ํ๋จํ๋ฉด์ ์งํํด์ผ ํ๋ค.
ํฌ๋ฃจ์ค์นผ(Kruscal) ์๊ณ ๋ฆฌ์ฆ ์ต์ ๋น์ฉ ์ ์ฅํธ๋ฆฌ(Minimum Spanning Tree) ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. [Algorithm] ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree) (tistory.com) [Algorithm] ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree)์ ์ฅํธ๋ฆฌ(SpanningTree) ๊ทธ๋ํ ์ค ๋ชจ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ฐ์ ๋ค ์ฌ์ด์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ฅผ ์๋ฏธํ๋ค. ํน์ง์ผ๋ก๋ N๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ ์ต์ ๊ฐ์ (edge)์ ์๋ (N-1)๊ฐcclient.tistory.com์ด์ ์ ํฌ์คํ ํ ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ์ ๋ค์ฏ๊น์ง ํน์ง..
์ ์ฅํธ๋ฆฌ(SpanningTree)๊ทธ๋ํ ์ค ๋ชจ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ฐ์ ๋ค ์ฌ์ด์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ฅผ ์๋ฏธํ๋ค. ํน์ง์ผ๋ก๋ N๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ ์ต์ ๊ฐ์ (edge)์ ์๋ (N-1)๊ฐ์ด๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree)์ ์ฅ ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ๋ชจ๋ ์ ์ ์ ๋ํ ์ต์ํ์ ์ฐ๊ฒฐ๋ง์ ๋จ๊ธด ๊ทธ๋ํ์ด๋ค. ํ ๊ณณ์ผ๋ก ๋๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๊ฐ ์ด์ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ดํด์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์ต์ํ์ ์ฐ๊ฒฐ์ด๋ผ ๋งํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ์์น ํ๋์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ๋จ ํ ๊ฐ์ง๋ก ๊ฒฐ์ ๋๋๋ก ํญ์ ํธ๋ฆฌ์ ํํ๋ฅผ ๋ํ๋ธ๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ๋ ์ด๋ฌํ ์ ์ฅ ํธ๋ฆฌ๋ค ์ค ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด ๊ฐ์ฅ ์์ ํธ๋ฆฌ์ด๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ๋ ๊ทธ๋ฆฌ๋ ..
Union-Find(์ ๋์จ ํ์ธ๋)๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก ์๋ก์(disjoint sets) ์งํฉ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์๋ก์ ์งํฉ์ด๋ ๊ณตํต ์์๊ฐ ์๋ ๋ ์งํฉ์ ์๋ฏธํ๋ค. ์๋ก์ ์งํฉ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ๋๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์งํฉ์ ํํํ๋๋ฐ, ์๋ก์ ์งํฉ ์ ๋ณด(ํฉ์งํฉ ์ฐ์ฐ)๊ฐ ์ฃผ์ด์ก์ ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ์งํฉ์ ํํํ๋ ์๋ก์ ์งํฉ ๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.1. union(ํฉ์งํฉ)์ฐ์ฐ์ ํ์ธํ์ฌ, ์๋ก ์ฐ๊ฒฐ๋ ๋ ๋ ธ๋ A, B๋ฅผ ํ์ธํ๋ค. - A์ B์ ๋ฃจํธ ๋ ธํธ A', B'๋ฅผ ๊ฐ๊ฐ ์ฐพ๋๋ค. - A'๋ฅผ B'์ ๋ถ๋ชจ ๋ ธ๋๋ก ์ค์ ํ๋ค.(B'๊ฐ A'๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค.)2. ๋ชจ๋ union(ํฉ์งํฉ) ์ฐ์ฐ์ ์ฒ๋ฆฌํ ๋๊น์ง 1๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.17. Union-Find(..