๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ | Kotlin/๐Ÿค– | ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋งค๋‚ด์ฒ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Manacher) ๊ฐœ๋…

by immgga 2024. 6. 24.

์ถœ์ฒ˜: unsplash.com

 

 

๋งค๋‚ด์ฒ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋œปํ•œ๋‹ค.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ S์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค(banana์—์„œ anana๊ฐ€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค).

๋ชจ๋“  i์— ๋Œ€ํ•ด i๋ฒˆ ๋ฌธ์ž๊ฐ€ ์ค‘์‹ฌ์ธ ์ตœ๋Œ€ ๊ธธ์ด์˜ ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ถ€๋ถ„๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.

ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ธธ์ด๋Š” ์ฃผ๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๋ฐ˜์ง€๋ฆ„์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค(๋ฐ˜์ง€๋ฆ„์ด๋ž€, ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์ค‘์‹ฌ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋จผ ๋ฌธ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค(aba์—์„œ ๋ฐ˜์ง€๋ฆ„์€ 1์ด ๋œ๋‹ค).
ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ธธ์ด๊ฐ€ i๋ผ๋ฉด ๋ฐ˜์ง€๋ฆ„์€ (i -1) / 2๊ฐ€ ๋œ๋‹ค.

 

๋งค๋‚ด์ฒ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ(ํšŒ๋ฌธ, palindrome)

๋’ค์ง‘์–ด๋„ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๋œปํ•œ๋‹ค.

๊ฑฐ๊พธ๋กœ ์ฝ์–ด๋„ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์˜ˆ์ด๋‹ค.

 

ํ•œ ๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ํšŒ๋ฌธ์ด๋‹ค.

  • a, b, c ๋“ฑ๋“ฑ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๋ชจ๋‘ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.

  • bob, abcba, level ๋“ฑ๋“ฑ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๋ชจ๋‘ ํšŒ๋ฌธ์ด ์•„๋‹ˆ๋‹ค.

  • banana, array, manacher ๋“ฑ๋“ฑ

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์„ฑ์งˆ

ํŒฐ๋ฆฐ๋“œ๋กฌ์€ ๊ฑฐ๊พธ๋กœ ์ฝ์–ด๋„ ์›๋ž˜ ๋ฌธ์ž์—ด๊ณผ ๋™์ผํ•˜๋‹ค(์ •์˜์™€ ๊ฐ™์Œ)

๊ฐ ํŒฐ๋ฆฐ๋“œ๋กฌ์€ ์ค‘์‹ฌ์ด ๋˜๋Š” ์ถ•์„ ๊ฐ€์ง„๋‹ค.

ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ธธ์ด๊ฐ€ n์ผ ๋•Œ n์ด ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” (n+1) / 2๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๊ณ ,

n์ด ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ, n / 2๋ฒˆ์งธ, n / 2 +1๋ฒˆ์งธ ๋ฌธ์ž ์‚ฌ์ด๊ฐ€ ์ถ•์ด ๋œ๋‹ค.

ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์•ž๋’ค์— ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ๋ถ™์ด๋ฉด ๊ณ„์† ํšŒ๋ฌธ์ด ๋œ๋‹ค.

์•ž๋’ค์— ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ๋ถ™์ผ ๊ฒฝ์šฐ, ๋’ค์ง‘์—ˆ์„ ๋•Œ๋„ ์•ž๋’ค์— ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ(aba -> aabaa: ๋‘˜ ๋‹ค ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค).

 

 

Manacher ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์˜ˆ์‹œ

S = banana, A[i]: i๋ฒˆ ๋ฌธ์ž๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ ๋ฐ˜์ง€๋ฆ„์ผ ๋•Œ

 

A[0] = 0: banana

A[1] = 0: banana

A[2] = 1: banana

A[3] = 2: banana

A[4] = 1: banana

A[5] = 0: banana

์œ„์™€ ๊ฐ™์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค(๊ธ€์ž๊ฐ€ ์ดˆ๋ก์ƒ‰์ธ ๋ถ€๋ถ„์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค).

A[i]๋ฅผ ๋Œ๋ฉด์„œ A[i]๋ฅผ ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ์ค‘์‹ฌ์œผ๋กœ ์‚ผ๊ณ  ์•ž๋’ค๋กœ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๊ฐ™์€ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณ„์‚ฐ

A[i]๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ ,
S[i - A[i] - 1]์ด๋ž‘ S[i + A[i] + 1]์ด ๊ฐ™๋‹ค๋ฉด A[i]๋ฅผ 1์”ฉ ๋Š˜๋ ค ์ค€๋‹ค.
์œ„์˜ ์˜ˆ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด i๊ฐ€ 1์ผ ๋•Œ, S[i - A[i] - 1]๋Š” S[0]๊ฐ€ ๋˜๊ณ , S[i + A[i] + 1]๋Š” S[2]๊ฐ€ ๋œ๋‹ค.
๋‘ ๋ฌธ์ž๊ฐ€ ๋‹ฌ๋ฆฌ์ง€๊ฑฐ๋‚˜ ๋ฌธ์ž์—ด์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

์ตœ์ ํ™” ๊ณ„์‚ฐ

๋ฌธ์ž์—ด์˜ ๋Œ€์นญ์„ฑ์„ ์ด์šฉํ•ด A[i]๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ๋Œ€์นญ์ถ•์ด j์— ์žˆ์„ ๋•Œ, i์™€ 2j-i๊ฐ€ ์žˆ์„๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณต์‹์ด ์„ฑ๋ฆฝ๋œ๋‹ค.

A[i] == A[2j-i]

 

i + A[2j - i]๊ฐ€ j + A[j] ์ด์ƒ์ธ ๊ฒฝ์šฐ๋Š” j +A[j] + j๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.

์‚ฌ์ง„์˜ ํŒŒ๋ž€ ์„ ์ด ์ดˆ๋ก ์„ ์„ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์–ธ์„ ์ œ์•ˆํ•˜๊ฒ ๋‹ค.

 

j + A[j]๊ฐ€ ๊ฐ€์žฅ ํฐ j๋ฅผ ๊ณ ๋ฅธ๋‹ค.

i + A[2j - i]๊ฐ€ j + A[j]๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š” A[i] = Z[2j - i]์ด๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, Z[i]๋ฅผ j + A[j] - i๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 1์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๊ณ„์‚ฐํ•œ๋‹ค.

 

์˜ˆ์ œ - ์ตœ๋Œ€ ๊ธธ์ด์˜ ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด

Manacher ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ 1ํšŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ฐ ๋ฌธ์ž๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ์ตœ๋Œ€์˜ ๊ธธ์ด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ๋Š”๋‹ค.

๋ชจ๋“  ํšŒ๋ฌธ์€ ์ค‘์‹ฌ์ถ•์„ ๊ฐ€์ง€๋ฏ€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ๋ ๊นŒ? ์ง์ˆ˜ ๊ธธ์ด์˜ ํšŒ๋ฌธ์€ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ฌธ์ž๊ฐ€ 2๊ฐœ์ด๋ฏ€๋กœ ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์ง์ˆ˜์ธ ๊ฒฝ์šฐ์—๋Š” S์˜ ๋ฌธ์ž ์‚ฌ์ด์‚ฌ์ด์— ํŠน์ˆ˜๊ธฐํ˜ธ๋ฅผ ๋ผ์šด๋‹ค. ๋งจ ์•ž ๋งจ๋’ค ํฌํ•จ.

์˜ˆ) ababa -> ?a?b?a?b?a

๋ผ์šธ ๋ฌธ์ž๊ฐ€ ๋ฌธ์ž์—ด์— ์—†๋Š” ๋ฌธ์ž์ผ ํ•„์š”๋Š” ์—†๋‹ค.

 

 

 

์ •๋ฆฌ

๋งค๋‚ด์ฒ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜ค์ง ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์“ธ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋ฒ”์šฉ์„ฑ์€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด๋„ ๋ถ€๋ถ„ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ์— ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•ด์„œ ์ฝ”๋“œ์—์„œ ์จ๋จน์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค..(์•„์ง์€ ์ดํ•ด๊ฐ€ ์–ด๋ ต๋‹ค)

728x90

๋Œ“๊ธ€