Skip to content

Latest commit

ย 

History

History
39 lines (23 loc) ยท 2.17 KB

string.md

File metadata and controls

39 lines (23 loc) ยท 2.17 KB

๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž‘์„ฑ์ž : ์„œ๊ทธ๋ฆผ

Table of Contents

๋ฌธ์ž์—ด ํŒจํ„ด ๋งค์นญ

๋ฌธ์ž์—ด T ์•ˆ์— ๋ฌธ์ž์—ด ํŒจํ„ด P๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด์ž.

๋ฌธ์ž์—ด ํŒจํ„ด ๋งค์นญ์— ์™„์ „ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด T๋ฅผ ์ฐจ๋ก€๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ํŒจํ„ด P ๋‚ด์˜ ๋ฌธ์ž๋“ค์„ ์ผ์ผ์ด ๋น„๊ตํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(TP)๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Knuth-Morris-Pratt Algorithm)

์™„์ „ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ 'ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ •๋ณด'๋Š” ํŒจํ„ด์ด ์•ˆ ๋งž๋‹ค๊ณ  ๊ฒฐ๋ก ๋‚ด๊ธฐ ์ „ '์–ด๋””๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์ด ์ผ์น˜ํ–ˆ๋Š”์ง€'์— ๋Œ€ํ•œ ์ •๋ณด์ด๋‹ค. KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด ์ •๋ณด๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•˜์—ฌ ๋‹ค์‹œ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ๋งค์นญ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. O(T+P) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„

  1. ํŒจํ„ด P์— ๋Œ€ํ•˜์—ฌ fail[k]๋ฅผ ๊ตฌํ•œ๋‹ค. (fail[k] : k ์ธ๋ฑ์Šค์—์„œ ์ ‘๋‘์‚ฌ์™€ ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์ตœ๋Œ€ ๊ธธ์ด)
  2. ๋ฌธ์ž์—ด T๋Š” ์ธ๋ฑ์Šค i๋กœ, ํŒจํ„ด P๋Š” ์ธ๋ฑ์Šค j๋กœ ์ฐจ๋ก€๋กœ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฌธ์ž๋“ค์„ ๋น„๊ตํ•œ๋‹ค.
  3. j ์ธ๋ฑ์Šค์—์„œ ๋ฌธ์ž์—ด ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด j ๊ฐ’์„ fail[j-1] ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ด๋‚˜๊ฐ„๋‹ค. (j๊ฐ€ 0์ด ๋˜๋ฉด ๋ฉˆ์ถค)

์‹คํŒจํ•จ์ˆ˜ fail ๋งŒ๋“ค๊ธฐ

fail ํ•จ์ˆ˜๋Š” ํŒจํ„ด ๋งค์นญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ํŒจํ„ด ํฌ์ธํ„ฐ๊ฐ€ ๋Œ์•„๊ฐˆ ๊ณณ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. (์ „์ฒ˜๋ฆฌ)

  1. 0 ์ธ๋ฑ์Šค๋Š” ๋Œ์•„๊ฐˆ ๊ณณ์ด ์—†์œผ๋ฏ€๋กœ fail[0] = 0;
  2. ํŒจํ„ด P์— ๋Œ€ํ•˜์—ฌ ์ ‘๋ฏธ์‚ฌ๋Š” ์ธ๋ฑ์Šค i๋กœ, ์ ‘๋‘์‚ฌ๋Š” ์ธ๋ฑ์Šค j๋กœ ์ฐจ๋ก€๋กœ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฌธ์ž๋“ค์„ ๋น„๊ตํ•œ๋‹ค. 3-1. i ์ธ๋ฑ์Šค์™€ j ์ธ๋ฑ์Šค์˜ ๋ฌธ์ž์—ด์ด ์ผ์น˜ํ•˜๋ฉด fail[i] = ++j; 3-2. j ์ธ๋ฑ์Šค์—์„œ ๋ฌธ์ž์—ด ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด j ๊ฐ’์„ fail[j-1] ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ด๋‚˜๊ฐ„๋‹ค. (j๊ฐ€ 0์ด ๋˜๋ฉด ๋ฉˆ์ถค)

KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ โ–ถ๏ธ KMPTest.java