๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š 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 (์„ ํƒ์ •๋ ฌ) - ์ œ์ž๋ฆฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ํ•ด๋‹น ์ˆœ..

728x90