Skip to content

Latest commit

ย 

History

History
264 lines (187 loc) ยท 13.4 KB

README.md

File metadata and controls

264 lines (187 loc) ยท 13.4 KB

Algorithm (์•Œ๊ณ ๋ฆฌ์ฆ˜)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ โ–ถ๏ธŽ ๐Ÿ—’

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‘์šฉ


์งˆ์˜์‘๋‹ต

DFS์™€ BFS์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. BFS ์žฅ์ 
    1. ๋„ˆ๋น„๋ฅผ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์ด ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋„ ์ตœ๋‹จ๊ฒฝ๋กœ์ž„์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
    2. ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์–ด๋Š ํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋ฌดํ•œํžˆ ๊นŠ์–ด์ง„๋‹ค ํ•ด๋„ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    3. ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ์ ๊ณ  ๊นŠ์ด๊ฐ€ ์–•์€ ํ•ด๊ฐ€ ์กด์žฌํ•  ๋•Œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. BFS ๋‹จ์ 
    1. ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” DFS์™€๋Š” ๋‹ฌ๋ฆฌ ํ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ์— ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๋“ค์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ํ•„์š”์—†๋Š” ๋…ธ๋“œ๋“ค๊นŒ์ง€ ์ €์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ํฐ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    2. ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ ๋˜ํ•œ ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค.
  3. DFS ์žฅ์ 
    1. BFS์— ๋น„ํ•ด ์ €์žฅ๊ณต๊ฐ„์˜ ํ•„์š”์„ฑ์ด ์ ๊ณ  ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ๋“ค๋งŒ ์ €์žฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    2. ์ฐพ์•„์•ผํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ์ˆ˜๋ก, ๊ทธ ๋…ธ๋“œ๊ฐ€ ์ขŒ์ธก์— ์žˆ์„ ์ˆ˜๋ก BFS๋ณด๋‹ค ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. DFS ๋‹จ์ 
    1. ๋‹ต์ด ์•„๋‹Œ ๊ฒฝ๋กœ๊ฐ€ ๋งค์šฐ ๊นŠ๋‹ค๋ฉด, ๊ทธ ๊ฒฝ๋กœ์— ๊นŠ์ด ๋น ์งˆ ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. ๋‚ด๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ฐพ์€ ์ตœ๋‹จ๊ฒฝ๋กœ๊ฐ€ ๋๊นŒ์ง€ ํƒ์ƒ‰ ํ–ˆ์„ ๋•Œ์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค.


๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์ •๋ ฌ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์–ด๋–ค ์ •๋ ฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๊ณ  ์™œ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์–˜๊ธฐ๋ฅผ ํ•ด์ฃผ์„ธ์š”.

(์˜ˆ์‹œ ๋‹ต์•ˆ) ํ€ต์†ŒํŠธ๋กœ ๊ตฌํ˜„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ€ต์†ŒํŠธ๋Š” average case์—์„œ nlgn์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ณต๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ๋„ ์ œ์ž๋ฆฌ ์ •๋ ฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. worst case์˜ ๊ฒฝ์šฐ n^2์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€์ง€๋งŒ worst case๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒฝ์šฐ๋Š” ํ™•๋ฅ ์ ์œผ๋กœ ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค. (์ž๋ฃŒ๊ฐ€ n๊ฐœ์ผ ๋•Œ ์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ -> 2/n!)

ํ€ต์†ŒํŠธ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

ํ”ผ๋ฒ—์˜ ์œ„์น˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ •ํ•œ ์œ„์น˜์— ๋Œ€ํ•ด์„œ๋งŒ(ex. ์ฒซ๋ฒˆ์งธ element) ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฒซ๋ฒˆ์งธ, ๋งˆ์ง€๋ง‰ element ์ค‘ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•œ๋‹ค๊ฑฐ๋‚˜ ์ฒซ๋ฒˆ์งธ, ๊ฐ€์šด๋ฐ, ๋งˆ์ง€๋ง‰ element ์ค‘ ์ค‘๊ฐ„๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ํ”ผ๋ฒ—์„ ์„ค์ •ํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋” ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จธ์ง€์†ŒํŠธ์˜ ๋ถ„ํ•  ์ •๋ณต ๊ณผ์ •์— ๋Œ€ํ•ด ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • Divide : ์ดˆ๊ธฐ ๋ฐฐ์—ด์„ 2๊ฐœ์˜ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• 
  • Conquer : ๊ฐ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌ
  • Combine : ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๊ฒฐํ•ฉ


MST(Minimum Spanning Tree)๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์ •์ ์˜ ๊ฐœ์ˆ˜ : V, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ : E

๋Œ€ํ‘œ์ ์œผ๋กœ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ •์ ์„ ์„ ํƒํ•˜๊ณ  ๊ทธ๊ฒƒ๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฐ€์žฅ ์ ์€ ๋น„์šฉ์˜ ์ •์ ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, O(ElogV)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•˜์—ฌ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๊ฐ„์„ ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ O(ElogE)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ •์ ์˜ ๊ฐœ์ˆ˜์— ๋น„ํ•ด ๊ฐ„์„ ์ด ๋งŽ์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜์— ๋น„ํ•ด ์ •์ ์ด ๋งŽ์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Minmum Spanning Tree๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘์›๋ฆฌ ๋˜๋Š” ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. ์‹œ์ž‘ ๋‹จ๊ณ„์—์„œ๋Š” ์‹œ์ž‘ ์ •์ ๋งŒ์ด MST(์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ) ์ง‘ํ•ฉ์— ํฌํ•จ๋œ๋‹ค.
  2. ์•ž ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ MST ์ง‘ํ•ฉ์— ์ธ์ ‘ํ•œ ์ •์ ๋“ค ์ค‘์—์„œ ์ตœ์†Œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ์„ ํƒํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•œ๋‹ค.์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.
  3. ์œ„์˜ ๊ณผ์ •์„ ํŠธ๋ฆฌ๊ฐ€ (N-1)๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Minmum Spanning Tree๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘์›๋ฆฌ ๋˜๋Š” ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  2. ์ •๋ ฌ๋œ ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค.
    1. ์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.
    2. ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜๋Š” ๊ฐ„์„ ์„ ์ œ์™ธํ•œ๋‹ค.(Union-Find ์‚ฌ์šฉ)
  3. ํ•ด๋‹น ๊ฐ„์„ ์„ ํ˜„์žฌ์˜ MST(์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ)์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•œ๋‹ค.


์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‘ ๊ฐ€์ง€ ์ด์ƒ ๋งํ•˜๊ณ  ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ๋‹ค์ต์ŠคํŠธ๋ผ : ํ•˜๋‚˜์˜ ์‹œ์ž‘ ์ •์  ~ ๋ชจ๋“  ๋‹ค๋ฅธ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๋ฒจ๋งŒํฌ๋“œ : ํ•˜๋‚˜์˜ ์‹œ์ž‘ ์ •์  ~ ๋ชจ๋“  ๋‹ค๋ฅธ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค. + ๊ฐ€์ค‘์น˜๊ฐ€ ์Œ์ˆ˜์ผ ๋•Œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์Œ์˜ ์‚ฌ์ดํด ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ)
  • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ : ๋ชจ๋“  ์ •์  ~ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘์›๋ฆฌ ๋˜๋Š” ํŠน์ง•์„ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ์—ฐ๊ด€์ง€์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

(๋ฐฉ๋ฒ• 1)

  1. ์ถœ๋ฐœ ๋…ธ๋“œ S์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด D๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค. (D ๋ฐฐ์—ด ๊ฒ€์‚ฌ)
  3. ์„ ํƒํ•œ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด D๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
  4. ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ 3, 4 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ V๋ผ๊ณ  ํ•  ๋•Œ, ์ด V*V๋ฒˆ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ O(V^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

(๋ฐฉ๋ฒ• 2 - ํž™/์šฐ์„ ์ˆœ์œ„ํ ์‚ฌ์šฉ)

  1. ์ถœ๋ฐœ ๋…ธ๋“œ S์— ๋Œ€ํ•˜์—ฌ D ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ D[S] = 0์„ ํ•ด์ค€๋‹ค. ์ด์™€ ๋™์‹œ์— ํž™์— ๋…ธ๋“œ ์ •๋ณด(๋ฒˆํ˜ธ, ๊ฑฐ๋ฆฌ : [S, 0])๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
  2. ํž™์—์„œ ๋งจ ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ I๋ฅผ ๊บผ๋‚ธ๋‹ค.
  3. ๋งŒ์ผ ๊บผ๋‚ธ ๋…ธ๋“œ I์˜ ๊ฑฐ๋ฆฌ ์ •๋ณด๊ฐ€ ํ˜„์žฌ D[I]๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ผ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฌด์‹œํ•œ๋‹ค.
  4. I๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, D ๋ฐฐ์—ด์ด ๊ฐฑ์‹ ๋  ๊ฒฝ์šฐ ๊ทธ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ํž™์— ๋„ฃ๋Š”๋‹ค.
  5. ํž™์— ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ 2-4 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  6. ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ V, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ E๋ผ๊ณ  ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(ElogV) ์ด๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ํž™(์šฐ์„ ์ˆœ์œ„ํ)์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์–ด๋–ค ์ ์—์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฐœ์„ ์ด ๋˜๋‚˜์š”?

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์ด ์žˆ๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ O(๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜)๋งŒํผ์˜ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํž™(์šฐ์„ ์ˆœ์œ„ํ)์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ทธ ๋น„์šฉ์„ O(log{ํž™์— ์ €์žฅํ•œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜})๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘์›๋ฆฌ ๋˜๋Š” ํŠน์ง•์„ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ์—ฐ๊ด€์ง€์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ„์„ ๋„ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์Œ์˜ ์‚ฌ์ดํด์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ ธ์•ผ ํ•œ๋‹ค.
  2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ V - 1๋ฒˆ E๊ฐœ์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ™•์ธํ•œ๋‹ค.
  3. ์Œ์˜ ์‚ฌ์ดํด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ๋ฒˆ ๋” (V๋ฒˆ์งธ) E๊ฐœ์˜ ๊ฐ„์„ ์„ ํ™•์ธํ•œ๋‹ค.
  4. ์ด ๋•Œ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์ด ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค๋ฉด, ๊ทธ๋ž˜ํ”„ G๋Š” ์Œ์˜ ์‚ฌ์ดํด์„ ๊ฐ€์ง„๋‹ค.
  5. ๋”ฐ๋ผ์„œ ์ด V x E ๋ฒˆ ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ O(VE)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘์›๋ฆฌ ๋˜๋Š” ํŠน์ง•์„ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ์—ฐ๊ด€์ง€์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. ์‚ฌ์ดํด์ด ์—†๋‹ค๋ฉด ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ ธ๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.
  3. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์œ ์ง€์— ๋Œ€ํ•ด์„œ ๋ชจ๋“  ์ •์  -> ๋ชจ๋“  ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” V^3์ด๊ณ , ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(V^3)


KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Kunth, Morris, Prett์ด ๋งŒ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ์„œ ๊ฐ ์ด๋ฆ„์˜ ์•ž์ž๋ฆฌ๋ฅผ ๋”ฐ์„œ KMP๋ผ๊ณ  ์ง€์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์ด ๋ถˆ์ผ์น˜ํ•  ๋•Œ ๊ทธ ๋‹ค์Œ ๋ฌธ์ž๋ถ€ํ„ฐ ๋‹ค์‹œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง€๊ธˆ๊นŒ์ง€ ์ผ์น˜ํ–ˆ๋˜ ์ •๋ณด๋“ค์„ ๋ฒ„๋ฆฌ์ง€ ๋ง๊ณ  ์žฌ์‚ฌ์šฉ ํ•จ์œผ๋กœ์จ ๋ช‡์นธ ์ •๋„๋Š” ๊ฑด๋„ˆ ๋›ฐ์–ด์„œ ํƒ์ƒ‰ํ•˜์ž๋Š” ์•„์ด๋””์–ด์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ์™€ ์ ‘๋ฏธ์‚ฌ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฌธ์ž์—ด์„ ์ ํ”„ํ•ด๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ, Naiveํ•œ ๋ฌธ์ž์—ด ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด O(NM)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š” ๋ฐ˜๋ฉด์— KMP์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(N+M)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋ผ๋นˆ ์นดํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฌธ์ž์—ด์˜ ํ•ด์‹œํ•จ์ˆ˜๊ฐ’์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰ ๋Œ€์ƒ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ M์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ๊ธ€์„ M์นธ์”ฉ, ํ•œ์นธ ํ•œ์นธ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋–ผ์–ด๋‚ด๊ณ  ํ•ด์‹œํ•จ์ˆ˜๊ฐ’์„ ๊ตฌํ•˜์—ฌ ํƒ์ƒ‰ ๋ฌธ์ž์—ด์˜ ํ•ด์‹œํ•จ์ˆ˜๊ฐ’๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œํ•จ์ˆ˜๊ฐ’ ์ถฉ๋Œ์ด ์—†๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ๊ธ€์˜ ๊ธธ์ด๋ฅผ N์ด๋ผ๊ณ  ํ•˜๋ฉด O(N-M)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋ผ๋นˆ ์นดํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด KMP๋ณด๋‹ค ๋น ๋ฅธ๊ฐ€?

์‚ฌ์‹ค์ƒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํƒ์ƒ‰ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜๋ก ํ•ด์‹œํ•จ์ˆ˜๊ฐ’์— ์ถฉ๋Œ์ด ์ƒ๊ธธ ํ™•๋ฅ ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด์‹œํ•จ์ˆ˜๊ฐ’์ด ์ผ์น˜ํ•œ๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œํ•จ์ˆ˜๊ฐ’์ด ์ผ์น˜ํ–ˆ์„ ๋•Œ ๋ฌธ์ž์—ด์„ ์ง์ ‘ ๋น„๊ตํ•˜๋Š” 2์ฐจ์ ์ธ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ‰๊ท ์ ์œผ๋กœ ๋ผ๋นˆ ์นดํ”„ ๋˜ํ•œ O(N+M)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ•œ ์ข…๋ฅ˜์ธ ํŠธ๋ผ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํŠธ๋ผ์ด๋Š” ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ k์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ ๊ณ  ์–ด๋–ค ๋ฌธ์ž์—ด ์ง‘ํ•ฉ S์™€ ๋ฌธ์ž์—ด A๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ A๊ฐ€ S์•ˆ์— ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ๋Š”๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

ํŠธ๋ผ์ด์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ด๋ถ„ํƒ์ƒ‰์€ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ์— ์žˆ์–ด ๊ฒ€์ƒ‰์–ด์˜ ์ตœ๋Œ€ ๊ธธ์ด M * ์ „์ฒด ๋ฐ์ดํ„ฐ N ์ค‘ O(M log N)์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด์— ๋ฐ˜ํ•ด ํŠธ๋ผ์ด๋Š” ๋ฌธ์ž์—ด ํƒ์ƒ‰์—์„œ์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด์ธ ์‹œ๊ฐ„๋ณต์žก๋„ O(N)์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ํŠธ๋ผ์ด์˜ ๋‹จ์ ์€ ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’๋‹ค. ์•ŒํŒŒ๋ฒณ์„ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋ผ๋ฉด 1 depth๋‹น 26๊ฐœ์˜ ๊ณต๊ฐ„์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

ํŠธ๋ผ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‚˜์š”? ๊ฒฝํ—˜์„ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”.

๋ชจ๋ฒ” ๋‹ต์•ˆ) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ํŠธ๋ผ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์•„ํ˜ธ์ฝ”๋ผ์‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„ํ˜ธ์ฝ”๋ผ์‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ KMP์—์„œ ์‚ฌ์šฉํ•˜๋Š” Failure Function์„ ํŠธ๋ผ์ด๋กœ ํ™•์žฅ์‹œํ‚จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ž์—ด ํƒ์ƒ‰์— ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ํˆฌํฌ์ธํ„ฐ๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ณ  ์ฃผ๋กœ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋‚˜์š”?

๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ 2๊ฐœ๋ฅผ ์ด์šฉํ•ด์„œ ํฌ์ธํ„ฐ๋ฅผ ํ•œ์นธ ์”ฉ ์›€์ง์ด๋ฉฐ ํŠน์ • ๊ตฌ๊ฐ„ ๋‚ด์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์—ฐ์†๋˜๋Š” ๋ฐฐ์—ด์˜ ๊ตฌ๊ฐ„ ์ค‘ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๊ตฌ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.