๋ฐ˜์‘ํ˜•

 

๊ตญ๋ฏผ๋Œ€ํ•™๊ต์—์„œ "์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜" ๊ต์žฌ๋ฅผ ์ด์šฉํ•œ
 ๋ฐ•ํ•˜๋ช… ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜ ๊ต์•ˆ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์—… ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค

 

 

String Matching

 

๋ฌธ์„œ์—์„œ ๋‹จ์–ด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์œผ๋ ค๋ฉด?

 

 

๋ฌธ์„œ์—์„œ ํŠน์ • ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์„ํ…๋ฐ

 

์ด๋•Œ ์ฐพ์œผ๋ ค๋Š” ๋‹จ์–ด๋ฅผ pattern์ด๋ผ ํ•จ

 

์ด๋ ‡๊ฒŒ ๋ฌธ์„œ์—์„œ ๋‹จ์–ด๋ฅผ ์ฐพ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ์ฐพ์œผ๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์จ์•ผํ• ์ง€์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„

 

Problem Definition

 

 

 

์ž…๋ ฅ์€ ๊ธธ์ด n์ธ ๋ฌธ์„œ ๋ฌธ์ž์—ด A, ๊ธธ์ด m์ธ ํŒจํ„ด ๋ฌธ์ž์—ด P ๊ฐ€ ์ฃผ์–ด์ง€๊ณ  ๋ณดํ†ต n์ด m๋ณด๋‹ค ํ›จ์”ฌ ํฐ ์ƒํ™ฉ์ž„

 

์ด๋•Œ ์ถœ๋ ฅ์€ ํŒจํ„ด ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” A์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด(sub-string) ์œ„์น˜๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ๋จ

 

Naive Algorithm

 

๋ฌธ์„œ A์˜ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒจํ„ด P์— ๋งค์น˜ํ•ด๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ

 

Pseudo Code๋ฅผ ๋ณด๋ฉด

 

 

์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(mn)์ž„

 

  • O(n)ํšŒ ๋ฐ˜๋ณต (์ •ํ™•ํžˆ๋Š” n - m + 1 ๋งŒํผ)

  • ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค O(m) ๋ฒˆ์˜ ๋ฌธ์ž ๋น„๊ต

 

๋ฌธ์„œ์—์„œ ๋‹จ์–ด๋ฅผ O(mn)๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” KMP Algorithm์„ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ

 

KMP Algorithm

 

ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

 

 

KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ํŒจํ„ด์˜ ์ค‘๋ณต ๋ถ€๋ถ„์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต ๋งค์นญ์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ์ž„

 

์ค‘๋ณต ๋งค์นญ์„ ์–ด๋–ป๊ฒŒ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์„๊นŒ?

 

 

๋ณต๊ตฌ์œ„์น˜ ๋ฐฐ์—ด ฯ€๋ฅผ ํ™œ์šฉํ•จ

 

=> ๋ฌธ์ž ๋งค์นญ์— ์‹คํŒจํ–ˆ์„ ๋•Œ, ๋งค์นญ์„ ์žฌ์‹œ์ž‘ํ•  ์œ„์น˜ ํ‘œ์‹œ

 

๋งŒ์•ฝ ์œ„ ๊ทธ๋ฆผ์—์„œ w๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ด๋‹น ฯ€ ๋ฐฐ์—ด์— ์ ํžŒ 3๋ฒˆ index (์•ŒํŒŒ๋ฒณ d)๋ฅผ ํ˜„์žฌ w๊ฐ€ ๋น„๊ตํ•œ ์ž๋ฆฌ์—์„œ ํƒ์ƒ‰์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž„

 

 

์šฐ์„  ๊ทธ๋ฆผ์œผ๋กœ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์›€

 

๋ฌธ์„œ A์—์„œ P="abdabwz" ์ฐพ๊ธฐ

 

์šฐ์„  ๊ฐ๊ฐ ๋ฌธ์„œ์™€ ํŒจํ„ด์˜ ์ฒซ ์‹œ์ž‘ ์ธ๋ฑ์Šค์— ํฌ์ธํ„ฐ i, j๋ฅผ ์œ„์น˜์‹œํ‚ค๊ณ  ์‹œ์ž‘ํ•˜๋ฉด๋จ

 

1๋ฒˆ ์ƒํ™ฉ

 

i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ x์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ a๊ฐ€ ๋‹ค๋ฅด๊ณ  j๊ฐ€ 0์˜ ๊ฐ’์— ์œ„์น˜ํ•ด์žˆ์œผ๋ฉด i๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€ ์‹œํ‚ด
(๋ฌธ์„œ A์˜ ๋‹ค์Œ ๋ฌธ์ž์—ด์„ ์‚ดํŽด๋ด„)

 

2๋ฒˆ ์ƒํ™ฉ

 

i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ a์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ a๊ฐ€ ์ผ์น˜ํ•˜๋ฏ€๋กœ i์™€ j๋ฅผ ๋ชจ๋‘ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ์‚ดํŽด๋ด„

 

=> ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” abdab๊นŒ์ง€ ์ผ์น˜ํ•  ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ

 

3๋ฒˆ ์ƒํ™ฉ

 

 

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ฯ€๋ฐฐ์—ด์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ 

 

pseudo code๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” 'd' ์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” 'w'์˜ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์ด 0๋ฒˆ์ธ์ง€ ํ™•์ธํ•ด๋ด„

 

์œ„ ์ƒํ™ฉ์—์„œ๋Š” j๊ฐ€ 5๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ ฯ€๋ฐฐ์—ด์˜ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ ํžŒ 2๋ฒˆ ์ธ๋ฑ์Šค (๋ฌธ์ž d)๋กœ j๋ฅผ ์˜ฎ๊ฒจ ํ˜„์žฌ i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์™€ ๋น„๊ตํ•จ

 

=> ์ผ์น˜ํ•˜๋ฏ€๋กœ i์™€ j๊ฐ€ ๊ฐ๊ฐ 1์”ฉ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž„
(๋‹ค์‹œ ํƒ์ƒ‰์ด ์‹œ์ž‘๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ)

 

4๋ฒˆ ์ƒํ™ฉ

 

 

i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ๋ฌธ์ž d์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ๋ฌธ์ž a๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ฯ€๋ฐฐ์—ด์„ ๋”ฐ๋ผ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค (๋ฌธ์ž a)๋กœ ์ด๋™ํ•˜์—ฌ ํ˜„์žฌ i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž d์™€ ๋น„๊ต

 

์ด ๋•Œ ์ด๊ฒƒ๋„ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋ฐ j๊ฐ€ 0๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ i๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ด

 

 

๋งค์น˜ ์„ฑ๊ณต ํ›„ ์ƒํ™ฉ

 

์ด๋ ‡๊ฒŒ ๊ณ„์† ํƒ์ƒ‰ํ•˜๋ฉด j๊ฐ€ p์˜ ๊ธธ์ด์™€ ๋™์ผํ•ด์ง€๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒํ™ฉ์ด ์˜ค๊ฒŒ๋˜๋Š”๋ฐ

 

์ด๋Ÿฌ๋ฉด ๋งค์น˜๊ฐ€ ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  j๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ์‹œ์ผœ ๋‹ค์Œ ๋งค์น˜๋ฅผ ํƒ์ƒ‰ํ•จ

 

์ƒ๊ฐํ•ด๋ณผ์ 

 

String Match๋ฅผ ํ•  ๋•Œ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ

 

 

์œ„์™€ ๊ฐ™์€ ๋ฌธ์„œ A์™€ P๊ฐ€ ์ฃผ์–ด์ง€๋ฉด 2๊ฐœ๋ฅผ return ํ• ์ง€ 4๊ฐœ๋ฅผ return ํ• ์ง€์ž„

 

์ผ๋‹จ ์œ„์˜ KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 1๋ฒˆ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ 2๊ฐœ๋ฅผ returnํ•˜๋Š” ์ฝ”๋“œ์ž„

(๋งค์น˜ ์„ฑ๊ณต ํ›„ j๋งŒ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ๋‹ค์‹œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ)

 

๋ฐ‘์—์ฒ˜๋Ÿผ 4๊ฐœ๋ฅผ returnํ•˜๋Š” ์ƒํ™ฉ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

 

ฯ€๋ฐฐ์—ด์— ํƒ์ƒ‰์ด ๋๋‚ฌ์„ ๋•Œ ๋‹ค์‹œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๊ฐ’์„ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋†“์•„์•ผํ•จ

 

=> j๊ฐ€ P์˜ ๊ธธ์ด๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ์ค‘๊ฐ„์— ๋‹ค์‹œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๊ฐ’์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ

 

Complexity Analysis

 

pseudo code

 

 

๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค i์™€ j์˜ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์Œ

 

์œ„์—์„œ ๋‹ค๋ค˜๋˜ 4๊ฐ€์ง€ ์ƒํ™ฉ๋“ค์„ ์‚ดํŽด๋ดค์„ ๋•Œ 

 

  • i์™€ j๊ฐ€ ๋™์‹œ์— 1 ์ฆ๊ฐ€ํ•จ

  • i๋Š” 1 ์ฆ๊ฐ€ํ•˜๊ณ  j๋Š” 0์ด๋จ

  • i๋งŒ 1 ์ฆ๊ฐ€ํ•จ

  • j๊ฐ€ ฯ€[j]๋กœ ๊ฐ์†Œํ•จ

์ธ๋ฐ

 

i + (i - j)๋Š” ์ตœ์†Œํ•œ 1์”ฉ ์ฆ๊ฐ€ํ•จ

i + (i - j)์—์„œ j๋Š” ์–‘์ˆ˜์ด๋ฏ€๋กœ <= 2i ์ผํ…Œ๊ณ  pseudo code์—์„œ ๋ดค๋“ฏ์ด while๋ฌธ์˜ ์กฐ๊ฑด i < n์ด ์žˆ์œผ๋ฏ€๋กœ

 

i + (i - j) <= 2i <= 2n ์ด ๋จ

 

=> ์ฆ‰, i + (i - j) ๊ฐ€ 1์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ตœ์†Œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉฐ 2n์ด ๋˜๊ธฐ์ „์— ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•จ

O(2n) = O(n)

 

๊ฒฐ๊ตญ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜์ธ๋ฐ

i + (i - j)๋Š” ๊ฐ ์—ฐ์‚ฐ๋งˆ๋‹ค ์ตœ์†Œํ•œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ตฌํ•˜๋Š” ์ง€ํ‘œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

ฯ€ ๋ฐฐ์—ด ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๊ทธ๋Ÿผ ฯ€๋ฐฐ์—ด์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ?

 

 

 

 

 

 

ฯ€๋ฐฐ์—ด์€ LPS ๊ธธ์ด ๋ฐฐ์—ด์„ ํ•œ ์นธ ์˜ฎ๊ธด ๊ฒƒ๊ณผ ๋™์ผํ•จ

=> Longest Prefix Suffix (LPS)๋ž€ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰์ด ๊ฒน์น˜๋Š” (๋™์ผํ•œ) ๋ถ€๋ถ„์„ ์˜๋ฏธ

 

 

pseudo code์™€ ํ•จ๊ป˜ ฯ€๋ฐฐ์—ด์„ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด

 

์‹ค์ œ๋กœ๋Š” P๋ฐฐ์—ด ํ•˜๋‚˜์—์„œ 2๊ฐœ์˜ ํฌ์ธํ„ฐ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ณผ์ •์ž„

 

 

์šฐ์„  ์‹œ์ž‘ํ•  ๋•Œ i์˜ ์ธ๋ฑ์Šค๋Š” 1๋ถ€ํ„ฐ ์ง„ํ–‰์„ํ•จ

=> 0๋ฒˆ์งธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด์ฉŒํ”ผ ํƒ์ƒ‰ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์กฐ๊ฑด์— ๊ฑธ๋ฆฌ๋ฏ€๋กœ ๋”ฐ๋กœ ์–ด๋””๋กœ ๊ฐˆ์ง€ ๊ฒฐ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ด ๋ฐ”๋กœ 0์„ ๋„ฃ์Œ

(๋˜, 0๋ฒˆ์งธ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด ํŒจํ„ด์—์„œ ํŒจํ„ด์„ ์ฐพ์•„๋ฒ„๋ฆฌ๋Š” ๊ผด์ด ๋˜๋ฒ„๋ฆผ...)

 

์ด๋ ‡๊ฒŒ ์ดˆ๊ธฐ ์„ธํŒ…์„ ๋งˆ์ณค์œผ๋ฉด

LPS์˜ ๊ธธ์ด ์ฆ‰, j์˜ ์œ„์น˜๋ฅผ ํ•ด๋‹น ฯ€๋ฐฐ์—ด์ด ์ธ๋ฑ์Šค ์œ„์น˜์— ์ ์–ด์ฃผ๋ฉด ๋จ

 

1๋ฒˆ ์ƒํ™ฉ

 

 

i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ P์˜ 1๋ฒˆ ์ธ๋ฑ์Šค ๋ฌธ์ž a์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ 0๋ฒˆ ์ธ๋ฑ์Šค ๋ฌธ์ž a๊ฐ€ ์ผ์น˜ํ•˜๋ฏ€๋กœ j์™€ i๋ชจ๋‘ ์ฆ๊ฐ€์‹œํ‚ค๊ณ 

 

j์˜ ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ๋ฑ์Šค๋กœ ฯ€๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ์–ด์คŒ

 

2๋ฒˆ ์ƒํ™ฉ

 

i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž b์™€ j๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ์ธ๋ฑ์Šค 1๋ฒˆ ๋ฌธ์ž a๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ

ฯ€๋ฐฐ์—ด์— ๋”ฐ๋ผ 0๋ฒˆ์œผ๋กœ ์ด๋™ํ•ด์„œ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๊ณ  ๋˜ ๋‹ค๋ฅด๋ฏ€๋กœ ์ฝ”๋“œ์— ์˜ํ•ด i๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒƒ์ž„

 

 

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ˜๋ณต๋˜๋ฉฐ ์ง„ํ–‰๋จ

 

์ƒ๊ฐํ•ด๋ณผ์ 

 

pseudo code

 

์•„๊นŒ String Match๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ์ง€์— ๋Œ€ํ•ด 2๊ฐ€์ง€๋ฅผ ์ด์•ผ๊ธฐํ–ˆ์—ˆ๋Š”๋ฐ

 

ํ˜„์žฌ ํฌ์ŠคํŒ…ํ•˜๋Š” kmp ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ„์˜ ๋‚ด์šฉ์ค‘ 1๋ฒˆ ๋ฐฉ์‹์— ํ•ด๋‹นํ•˜๋Š” String Match๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ์Œ

 

๋งŒ์•ฝ 2๋ฒˆ ๋ฐฉ์‹์œผ๋กœ String Match ํ•˜๋Š” KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ฯ€๋ฐฐ์—ด์— ํƒ์ƒ‰์ด ๋๋‚ฌ์„ ๋•Œ ๋‹ค์‹œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๊ฐ’์„ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋†“์•„์•ผ ํ•˜๋Š”๋ฐ

 

์ด ๋•Œ๋Š” ฯ€๋ฐฐ์—ด ์ƒ์„ฑํ•  ๋•Œ while๋ฌธ์˜ ์กฐ๊ฑด์„ i < m - 1์ด ์•„๋‹ˆ๋ผ i < m์œผ๋กœ ํ•ด์•ผํ•จ!

 

 

์™œ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰์ด ๋˜๋Š”๊ฑธ๊นŒ?

 

 

์ดํ•ด๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฒฐ๊ตญ ฯ€๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์€ LPS์˜ ๊ธธ์ด ๋ฐฐ์—ด์„ ํ•œ ์นธ ์˜ฎ๊ธด๊ฑฐ๋ผ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๋ฉด๋จ

์–ด์ฉŒํ”ผ ํƒ์ƒ‰๊ณผ์ •์„ ์‚ดํŽด๋ดค์„ ๋•Œ ฯ€๋ฐฐ์—ด์—์„œ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” 0์œผ๋กœ ๊ฐ€๋Š” ์„ ํƒ์ง€ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ํฌ์ธํ„ฐ i๋ฅผ 1๋ฒˆ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ

๊ทธ๋ฆฌ๊ณ  ๊ฐ’์„ ์ ์„ ๋•Œ๋Š” i๋ฅผ ๋จผ์ € 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ํ•ด๋‹น ฯ€๋ฐฐ์—ด ์ž๋ฆฌ์— ๊ฐ’์„ ์ ์–ด์ค˜์•ผ LPS์˜ ๊ธธ์ด ๋ฐฐ์—ด์„ ํ•œ ์นธ ์˜ฎ๊ธด ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚จ

=> ์—ฌ๊ธฐ์„œ i๋Š” ํ˜„์žฌ ๊ธธ์ด์˜ ๋ฐฐ์—ด์—์„œ ๋’ท๋ถ€๋ถ„, j๋Š” ์ด์ „ ์ธ๋ฑ์Šค๋“ค์˜ ๊ธธ์ด ์ฆ‰, ์•ž๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ๊ธฐ์ „์— j ์œ„์น˜๋ฅผ + 1 ์‹œํ‚จ๊ฒŒ ๊ณง ํ•ด๋‹น LPS์˜ ๊ธธ์ด๊ฐ€ ๋˜๋Š”๊ฑฐ์ž„

 

Complexity Analysis

 

pseudo code

 

ฯ€ ๋ฐฐ์—ด ์ƒ์„ฑ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(m) ์ž„

 

=> ์•ž์„œ ๋‹ค๋ค˜๋˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฆ๋ช…๋จ

 

๋”ฐ๋ผ์„œ ์•ž์„œ ๊ตฌํ–ˆ๋˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)๊ณผ ๋”ํ•˜๋ฉด

 

KMP์˜ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(m + n)์ด ๋จ

 

 

๋ฐ˜์‘ํ˜•

'๐Ÿ”ฅ Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

L16 - NP-Completeness (1)  (0) 2024.12.03
L15 - Boyer-Moore Algorithm  (0) 2024.11.30
L13 - Topological Sorting  (0) 2024.11.29
L12 - Single Source Shortest Paths  (0) 2024.11.28
L11 - Minimum Spanning Trees  (0) 2024.11.26