๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
์ด์ ํฌ์คํ ์์ String Match์ ๋ํด O(n + m) = O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง KMP ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ค์์
์ด๋ฒ์๋ ์ต์ ์ ๊ฒฝ์ฐ O(n)๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ๋งค์นญํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ค๋ฃฐ ์์
String Match ๊ด๋ จ ํฌ์คํ ์ฐธ๊ณ
https://hanjungyo.tistory.com/101
L14 - KMP Algorithm
๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ ๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค String Matching ๋ฌธ์์์ ๋จ์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด? ๋ฌธ์์์ ํน
hanjungyo.tistory.com
Boyer-Moore-Horspool Algorithm
์์ ๋งํ๋ฏ์ด ์ต์ ์ ๊ฒฝ์ฐ O(n) ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ String Match๋ฅผ ํ ์ ์์๊น์์ ๋ถํฐ ์์๋จ
Boyer-Moore-Horspool ์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด๋
Bad Character Rule๋ก ๋ถํ์ํ ๋น๊ต๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์
=> Bad Character Rule์ด๋ ๋ฌธ์ A์ ๋ง์ง๋ง ๋น๊ต ๋ฌธ์๋ฅผ ํ์ธํ์ฌ ๋งค์น ๊ฐ๋ฅ์ฑ์ ํ์ธํ๋ ๊ฒ์
์ฐ์ ํจํด์ด ์ผ์นํ์ง ์๋๊ฑธ ํ์ธํ๊ณ ๋ฌธ์ A์์ ๋ง์ง๋ง ๋น๊ต๋ฌธ์ "b"๋ P์ ์๊ธฐ ๋๋ฌธ์ 5์นธ์ ๊ฑด๋๋ธ ์ ์์
์ ์ํฉ๊ณผ ๋์ผํ๊ฒ ํจํด์ด ์ผ์นํ์ง ์๋๊ฑธ ํ์ธํ๊ณ
๋ฌธ์ A์์ ๋ง์ง๋ง ๋น๊ต๋ฌธ์ "i"๋ P์ 2๋ฒ์งธ์ ์๊ธฐ ๋๋ฌธ์ 3์นธ์ ๊ฑด๋๋ธ ์ ์์
๋ง์ง๋ง ๋น๊ต๋ฌธ์๊ฐ ์ด๋ค ๊ฒ์ธ์ง์ ๋ฐ๋ผ ํจํด ๋งค์นญ์ ์ผ๋ง๋ ๊ฑด๋๋ธ์ง๋ฅผ ๊ธฐ๋กํด๋๋ ๊ฒ์ธ๋ฐ
๋ง์ฝ P = "rational" ๊ฐ์ด ์ค๋ณต๋ ๋ฌธ์๊ฐ ์์ ๊ฒฝ์ฐ์๋
๋ ์์ jump๋ฅผ ์ ํํด์ผ ํน์ ๊ฒฝ์ฐ๊ฐ ์ ์ธ๋์ง ์๊ณ match๊ฐ ๊ฐ๋ฅํจ
jump๋ฅผ ๋ง๋ค ๋ python์ ๊ธฐ์ค์ผ๋ก default dict๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐํ ๋ฌธ์๊ฐ ์ฌ ๊ฒฝ์ฐ์ ๋ํด ์ค์ ์ ํด๋๊ณ
์ค๋ณต ๋ฌธ์์ ๊ฒฝ์ฐ๋ ์์์ ๋ถํฐ ์ฐจ๋ก๋๋ก dict์ ๋ฃ์ผ๋ฉด ์ด์ฉํผ ๋ฎ์ด ์์์ง๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์
์์ ์ํฉ์ ํ๋ฆ์ ๋ณด๋ฉด ์ดํด๊ฐ ํจ์ฌ ์๋จ
์ฐ์ pseudo code๋ถํฐ ์ดํด๋ณด๋ฉด compute_jump๋ก jump dict๋ฅผ ๋ง๋ค์๊ณ
while๋ฌธ์ ํตํด ํ์ฌ A์ ๋น๊ต ๋ฌธ์์ด๊ณผ ํจํด P์ ๋ท์ชฝ๋ถํฐ ์ฐจ๋ก๋ก ๊ฒ์ฌํ๋ฉฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ i๋ฅผ jump์์ ๋ง์ง๋ง ๋น๊ต ๋ฌธ์์ ์ ํ ์ซ์๋ฅผ ํ์ธํ์ฌ ์ด๋์ํด
์ ์ํฉ์์๋ ์ผ๋จ ํจํด์ด ์ผ์นํ์ง ์๋๊ฑธ ํ์ธํ๊ณ ๋ง์ง๋ง ๋น๊ต๋ฌธ์๊ฐ ๋ฌธ์ A์ "d" ์์
๊ทผ๋ฐ ์ด "d"๋ ํจํด์ ์ํ์ง ์๋ ๋ฌธ์์ด๋ฏ๋ก jump์ ๊ธฐํ์ ์๋ 4๋งํผ ๊ฑด๋๋ฐ๊ฒ๋๋จ
๊ทธ๋ผ ์ ๊ทธ๋ฆผ์ ์ํฉ์ด ๋๊ณ 4์นธ ๊ฑด๋๋ฐ๊ฒ ๋์ด ๋ค์ ๋ฌธ์ A์ abac์ ํจํด abac๋ฅผ ๋ค์์ ๋ถํฐ while๋ฌธ์ผ๋ก ๊ฒ์ํ๊ฒ ๋จ
์ด ๊ฒฝ์ฐ ํจํด์ด ์ผ์นํ๋ฏ๋ก i๋ฅผ returnํด์ฃผ๊ณ jump dict์์ ๋ง์ง๋ง ๋น๊ต ๋ฌธ์์ธ c๋ฅผ ๋ณด๊ณ 4๋งํผ ๊ฑด๋๋ฐ์ด ๋ค์ ๋งค์นญ์ ์์ํจ
Boyer-Moore Algorithm
Boyer-Moore-Horspool ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ Bad Character Rule๋ง ํ์ฉํ๋๋ฐ
Boyer-Moore ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ Bad Character Rule๊ณผ Good Suffix Rule์ ํตํด ๋ถํ์ํ ๋น๊ต๋ฅผ ๊ฑด๋๋
=> ๋ Rule ์ค์ ๋ ๋ง์ด ๊ฑด๋๋ฐ๋ ๊ฒ์ ์ ํ
Bad Character Rule์ ๊ฒฝ์ฐ ํ๋ฆฐ๊ฑธ ๊ธฐ์ค์ผ๋ก ๊ฑด๋๋ฐ๊ณ
Good Suffix Rule์ ๊ฒฝ์ฐ ์ผ์นํ๋ ๋ฌธ์์ด์ด ์ค๋ณต๋๋๊ฒ ์๋๋ฅผ ํ์ธํ๊ณ ๊ฑด๋๋ฐ๊ฒ๋จ
์ ์ํฉ๊ณผ ๊ฐ์ด Bad Character Rule์ด ๋ค๋ก ๋ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์
=> ์ด๋ด ๊ฒฝ์ฐ ๋ ๋ง์ด ๊ฑด๋๋ฐ๋ Good Suffix Rule์ ์ ํํด์ ๋ค์ ๋งค์นญ์ ์งํํจ
Complexity Analysis
์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(mn)์
=> ๊ฑด๋๋ฐ๊ธฐ๊ฐ ํ ๋ฒ๋ ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ ๊ณ์ 1์นธ์ฉ ์ด๋ํ๋ฏ๋ก (n-m+1) ํ ๋ฐ๋ณตํ๋ฉฐ ํจํด ์ ์ฒด m ์ ๋น๊ตํ๋ฏ๋ก
์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๋ O(n/m)์
=> ํญ์ ๊ฑด๋๋ฐ๊ธฐ๊ฐ ๋ฐ์ํด์ ํจํด ๋งํผ ๊ฑด๋๋ฐ๊ฒ ๋๋ฉด (n-m+1) /m ํ ๋ฐ๋ณตํ๋ฉฐ O(1)์ ๋น๊ต๋ฅผ ์ํํจ
(๋ฌธ์ A์ ํจํด P ์ฌ์ด์ ์ผ์นํ๋ ๋ฌธ์๊ฐ ์ ํ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋ฉด๋จ)
๋๋ถ๋ถ์ ์ํฉ์์ KMP ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋์
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L16 - NP-Completeness (2) (0) | 2024.12.05 |
---|---|
L16 - NP-Completeness (1) (0) | 2024.12.03 |
L14 - KMP Algorithm (1) | 2024.11.30 |
L13 - Topological Sorting (0) | 2024.11.29 |
L12 - Single Source Shortest Paths (0) | 2024.11.28 |