728x90
๋ฐ˜์‘ํ˜•

์ž๋ฃŒ๊ตฌ์กฐ 4

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Kruskal Algorithm)

์‹ ์žฅ ํŠธ๋ฆฌ (Spanning Tree) ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉด์„œ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉด์„œ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์กฐ๊ฑด์€ ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์ด๊ธฐ๋„ ํ•˜๋‹ค. ์‹ ์žฅ ํŠธ๋ฆฌ ์‚ฌ์šฉ ๋ชฉ์  ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ ์ผ๋ถ€ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์ ์—์„œ ์‹ค์ œ ๋ฌธ์ œ ์ƒํ™ฉ์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ (MST, Minimum Spanning Tree) ์ตœ์†Œํ•œ์˜ ๋น„์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด N๊ฐœ์˜ ๋„์‹œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋‘ ๋„์‹œ ์‚ฌ์ด์— ๋„๋กœ๋ฅผ ๋†“์•„ ์ „์ฒด ๋„์‹œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋„๋กœ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๋‘ ๋„์‹œ A, B๋ฅผ ์„ ํƒํ–ˆ์„ ๋•Œ A์—์„œ B๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋ฐ˜๋“œ..

Algorithm 2023.12.14

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์„œ๋กœ์†Œ ์ง‘ํ•ฉ (Disjoint Sets) - ์‚ฌ์ดํด ํŒ๋ณ„

์„œ๋กœ์†Œ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•œ ์‚ฌ์ดํด ํŒ๋ณ„ ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ์˜ ์‚ฌ์ดํด์„ ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ์˜ ์‚ฌ์ดํด ์—ฌ๋ถ€๋Š” DFS๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์‚ฌ์ดํด ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ ๊ฐ„์„ ์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋‘ ๋…ธ๋“œ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๋ฉด ๋‘ ๋…ธ๋“œ์— ๋Œ€ํ•˜์—ฌ ํ•ฉ์ง‘ํ•ฉ(Union) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ๊ฐ™๋‹ค๋ฉด ์‚ฌ์ดํด(Cycle)์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•˜์—ฌ 1๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. 2. ๋™์ž‘ ๊ณผ์ • ์‚ดํŽด๋ณด๊ธฐ 3. ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•œ ์‚ฌ์ดํด ํŒ๋ณ„ (์ฝ”๋“œ) 1) ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•œ ์‚ฌ์ดํด ํŒ๋ณ„ (Python) # ํŠน์ • ์›์†Œ๊ฐ€ ์†ํ•œ ์ง‘ํ•ฉ์„ ์ฐพ๊ธฐ def find_parent(parent, x): #..

Algorithm 2023.12.10

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์„œ๋กœ์†Œ ์ง‘ํ•ฉ (Disjoint Sets) - ์ž๋ฃŒ๊ตฌ์กฐ

๊ทธ๋ž˜ํ”„ ๊ทธ๋ž˜ํ”„(Graph)๋ž€ ๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด์— ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint Sets)์ด๋ž€ ๊ณตํ†ต ์›์†Œ๊ฐ€ ์—†๋Š” ๋‘ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ ์„œ๋กœ์†Œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ๋“ค๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์›์†Œ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋‘ ์ข…๋ฅ˜์˜ ์—ฐ์‚ฐ์„ ์ง€์›ํ•œ๋‹ค. ํ•ฉ์ง‘ํ•ฉ(Union): ๋‘ ๊ฐœ์˜ ์›์†Œ๊ฐ€ ํฌํ•จ๋œ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ•ฉ์น˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ์ฐพ๊ธฐ(Find): ํŠน์ •ํ•œ ์›์†Œ๊ฐ€ ์†ํ•œ ์ง‘ํ•ฉ์ด ์–ด๋–ค ์ง‘ํ•ฉ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ•ฉ์น˜๊ธฐ ์ฐพ๊ธฐ(Union Find) ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค. 1. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ฉ์น˜๊ธฐ ์—ฐ์‚ฐ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋™์ž‘ ๊ณผ์ • ํ•ฉ์ง‘ํ•ฉ(Union) ์—ฐ์‚ฐ์„ ํ™•์ธํ•˜์—ฌ,..

Algorithm 2023.12.09

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ(Stack)๊ณผ ํ(Queue)

์Šคํƒ (Stack) ์ด๋ž€? ์Šคํƒ(Stack)์€ ์Œ“์•„ ์˜ฌ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์Šคํƒ(Stack)์€ ์ฑ…์„ ์Œ“๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„ ์˜ฌ๋ฆฐ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ๋ฐฉ์‹์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์Šคํƒ์˜ ํŠน์ง• ์Šคํƒ์€ ์‹œ๊ฐ„ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฏ€๋กœ, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œ๋œ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์•„๋ž˜์—์„œ ์œ„๋กœ ์Œ“์ด๋Š” ํ˜•์‹์ด๋‹ค. ๊ฐ€์žฅ ์ตœ๊ทผ(๋งˆ์ง€๋ง‰)์— ๋“ค์–ด์˜จ ์ž๋ฃŒ๋ฅผ top์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์Šคํƒ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋Š”, top ์„ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ํ•œ ๊ณณ(top)์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ฐ€์žฅ ์œ„์ชฝ(์ตœ์‹ )์˜ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out)์˜ ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ..

CS/Data Structure 2023.08.04
728x90
๋ฐ˜์‘ํ˜•