Boyer Moore Horspool Algorithm

First Step

๋ฌธ์ž์—ด์—์„œ ์ผ์ •ํ•œ ๊ทœ์น™์„ ์ฐพ๋Š”๊ฒƒ์€ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐœ๋ฐœ๊ณผ์ •์—์„œ ์ž์ฃผ, ์‰ฝ๊ฒŒ ์ ‘ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋˜, ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋งŽ์ด ์“ฐ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฐ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํฌ๋ˆ„์Šค-๋ชจ๋ฆฌ์Šค-ํ”„๋žซ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ณด์ด์–ด-๋ฌด์–ด-ํ˜ธ์Šคํ’€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ผ๋นˆ-์นดํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ทธ๋Ÿฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ BMH ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ์ด๊ฑธ ๋จผ์ € ์ด์•ผ๊ธฐํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ€์žฅ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

Naive string search visualize

BMH ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์•ผ๊ธฐ ํ•˜๊ธฐ ์ „์— ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์„ ์ด์•ผ๊ธฐ ํ•˜๊ณ  ์‹ถ์–ด์š”. ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์˜ ๋ฐฉ๋ฒ•์„ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

Naive string search visualize example

Naive string search code

Output Pattern found at index 0 Pattern found at index 9 Pattern found at index 13

์ด์ฒ˜๋Ÿผ Naive string search๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป๋Š” ๊ฐ€์žฅ ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์ด์—์š”. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ธ€์ž๊ฐ€ ์ˆ˜์‹ญ์–ต๊ฐœ๊ฐ€ ๋œ๋‹ค๋ฉด? ํ•˜๋‚˜ํ•˜๋‚˜ ์ผ์ผํžˆ ๋น„๊ตํ•˜๋ ค๋ฉด ๊ต‰์žฅํžˆ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด๊บผ์—์š”. ๊ทธ๋ž˜์„œ ์ €๋Š” BMH ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ๊ฐœํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.

Boyer-Moore-Horspool search theory

BMH ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด ๊ณ„์‚ฐ ๊ณต์‹์„ ์ด์šฉํ•ด ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1. ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์˜ ์ด ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค. ****=> ์˜ˆ๋ฅผ ๋“ค์–ด TOOTH ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๊ธธ์ด๋Š” 5๊ฐ€ ๋ ๊บผ์—์š”. 2. ๊ฒ€์ƒ‰ํ•  ํ‚ค์›Œ๋“œ์—์„œ ์กด์žฌํ•˜๋Š” ๋ฌธ์ž์˜ index๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘œ๋กœ ๋งŒ๋“ ๋‹ค.

T
O
O
T
H

0

1

2

3

4

3. ํ•ด๋‹น ํ‘œ์—์„œ index๋ฅผ (์ด๊ธธ์ด - index - 1) ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

T
O
O
T
H

4

3

2

1

0

4. ํ‘œ์—์„œ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์™€ ํ‚ค์›Œ๋“œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž๋Š” ์ด๊ธธ์ด๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

T
O
O
T
H
*

4

3

2

1

5

5

5. ๋งŒ์•ฝ ๊ฐ™์€ ๋ฌธ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฌธ์ž์˜๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋กœ ๊ธฐ์ค€์„ ์žก๋Š”๋‹ค.

T
O
H
*

1

2

5

5

6. ์ด๋ฅผ ์ด์šฉํ•ด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋งค์น˜๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด ํ‘œ์˜ value ๋งŒํผ ์ด๋™์‹œํ‚จ๋‹ค.

์ฆ‰ ์ด BMH ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค์น˜๊ฐ€ ๋˜์ง€ ์•Š์•˜์„๋•Œ ํ˜„์žฌ ๊ฒ€์ƒ‰ index๋ฅผ ๊ณ„์‚ฐ ๊ณต์‹๋งŒํผ ์ด๋™์‹œํ‚ค๋Š”๊ฒŒ ํ•ต์‹ฌ์ด์—์š”.

BMH algorithm visualize

BMH Algorithm visualize example

BMH Algorithm code

์œ„์˜ ์ด๋ก ์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์„๊บผ์—์š”.

Reference.

๋ณด์ด์–ด ๋ฌด์–ด ํ˜ธ์Šคํ’€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฐธ๊ณ  ์˜์ƒ
BMH Algorithm wikipedia
Original paper by BMH Algorithm
Naive string search code

Last updated