ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… (๋ธŒ๋ฃจํŠธํฌ์Šค, KMP, Boyer-Moore)
    ๐Ÿ’ป IT Study/Algorithm 2020. 5. 8. 02:37

    ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰(String Search)์€ ๋ณธ๋ฌธ(T)์—์„œ ํŒจํ„ด(P)์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

    [๊ทธ๋ฆผ 1] ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์„ค๋ช…

     

     

    ๋ธŒ๋ฃจํŠธํฌ์Šค, KMP, Boyer-Moore 3๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•˜์—ฌ ๊ฐœ๋… ์œ„์ฃผ๋กœ ์•Œ์•„๋ณด๊ณ , ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

      01  ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋ฒ•(Brute Force)
      02  KMP๋ฒ•
      03  Boyer-Moore
      04 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ„๋‹จ ์š”์•ฝ & ๋น„๊ต  

     


    01 ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋ฒ•(Brute Force)

    brute a.๋ฌด์‹ํ•œ  force n.ํž˜

    ์ด๋ฅผ ํ•ด์„ํ•˜๋ฉด ๋ฌด์‹ํ•œ ํž˜์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค๋Š” ๋œป์œผ๋กœ ํ•œ๋งˆ๋””๋กœ ๋‹จ์ˆœ ๋ฌด์‹ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.  

    ์™„์ „ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์‹œํ—˜ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

    [๊ทธ๋ฆผ 2] ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฒ• ๊ณผ์ •

     

    ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์‹œ์—๋Š” ํŒจํ„ด์˜ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•ด๊ฐ€๋ฉด์„œ

    ๋ณธ๋ฌธ์˜ ํ…์ŠคํŠธ ๋ฌธ์ž์™€ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•ด๊ฐ„๋‹ค. 

     

    1. ๋‹ค๋ฅธ ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด ํŒจํ„ด์—์„œ ๋ฌธ์ž๋ฅผ ๊ฒ€์‚ฌํ–ˆ๋˜ ์œ„์น˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฒ„๋ฆฌ๊ณ 

    2. ๋‹ค์Œ ํ…์ŠคํŠธ์˜ ์œ„์น˜๋กœ 1์นธ ์ด๋™ํ•œ ๋‹ค์Œ

    3. ๋‹ค์‹œ ํŒจํ„ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•œ๋‹ค. 

     

     

    ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋ฒ•์„ ์ดํ•ดํ•˜๊ธฐ๋Š” ๊ฐ€์žฅ ์‰ฝ์ง€๋งŒ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์‹œ์—๋Š” ๊ฐ€์žฅ ๋น„ํšจ์œจ์ ์ด๋‹ค. 

     


    02 KMP๋ฒ•

    D.E. Knuth, J.H. Morris, V.R.Pratt๊ฐ€ ๊ฑฐ์˜ ๊ฐ™์€ ์‹œ๊ธฐ์— ๊ณ ์•ˆํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค ์ด๋ฆ„์˜ ๊ฐ ์•ž๊ธ€์ž๋ฅผ ๋”ฐ์„œ KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ๋ถ€๋ฅธ๋‹ค. 

     

    ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋ฒ•๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๊ฒ€์‚ฌํ–ˆ๋˜ ์œ„์น˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 

    ํ•œ ๋งˆ๋””๋กœ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ํŒจ์Šคํ•˜๊ณ , ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด ๋•Œ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฒ€์‚ฌํ–ˆ๋˜ ์œ„์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

     

    How? 

    ์ด๋™ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ฒฝ๊ณ„๋ฅผ ์ฐพ๊ณ  ์ ‘๋‘๋ถ€์—์„œ ์ ‘๋ฏธ๋ถ€๋กœ ๋งŒํผ ์ด๋™์„ ํ•ด์ค€๋‹ค. 

     ๊ฒฝ๊ณ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด ํŒจํ„ด์˜ ๊ธธ์ด๋งŒํผ ์ด๋™์„ ํ•ด์ค€๋‹ค. 

     

    ์ด๋ ‡๊ฒŒ๋งŒ ๋ณด๋ฉด ๋ฌด์Šจ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. 

    ์—ฌ๊ธฐ์„œ ๋จผ์ € ์•Œ์•„์•ผํ•  ๊ฐœ๋…์ด ๋ฌธ์ž์—ด์—์„œ ์ ‘๋‘๋ถ€(Prefix)์™€ ์ ‘๋ฏธ๋ถ€(Suffix)์ด๋‹ค. 

    ์ ‘๋‘๋ถ€(Prefix) : ๋ฌธ์ž์—ด์˜ ๋จธ๋ฆฌ๋ถ€๋ถ„
    ์ ‘๋ฏธ๋ถ€(Suffix) : ๋ฌธ์ž์—ด์˜ ๊ผฌ๋ฆฌ๋ถ€๋ถ„

    [๊ทธ๋ฆผ 3]์€ ์ ‘๋‘๋ถ€ ์ ‘๋ฏธ๋ถ€, ๊ฒฝ๊ณ„๋ฅผ BAABABAA๋ผ๋Š” ๋ฌธ์ž๋ฅผ ํ†ตํ•ด ์„ค๋ช…ํ•œ๋‹ค. 

    [๊ทธ๋ฆผ 3] ์ ‘๋‘๋ถ€(Prefix), ์ ‘๋ฏธ๋ถ€(Suffix), ๊ฒฝ๊ณ„

     

    [๊ทธ๋ฆผ 3]์— ์žˆ๋Š” ํ‘œ๋Š” ์ ‘๋‘๋ถ€(Prefix)์™€ ์ ‘๋ฏธ๋ถ€(Suffix)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ๋‹ค. 

    ๊ฒฝ๊ณ„๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

    ์ด๋Š” ํ‘œ์—์„œ 3๋ฒˆ์งธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ๊ฒฐ๊ตญ ์—ฌ๊ธฐ์„œ ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๊ฐ€ ๊ฐ™์€ 'BAA'์—์„œ ์ด ์‚ฌ์ด์— ๊ฐ’์ธ  'BA'๋ฅผ ๊ฒฝ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค. 

     

    [๊ทธ๋ฆผ 4] KMP ๊ฐ„์ถ”๋ฆฐ ๊ณผ์ •

     

    ๋ณธ๋ฌธ(T)๊ณผ ํŒจํ„ด(P)์„ ๋น„๊ตํ•˜๋ฉด์„œ ๋ถˆ์ผ์น˜ ์ง€์ ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ผ์น˜ํ•˜๋Š” ๊ฐ’ ์‚ฌ์ด์—์„œ ๊ฒฝ๊ณ„๋ฅผ ์ฐพ๊ณ  ์ด๋™์‹œ์ผœ์ฃผ๋ฉด๋œ๋‹ค. 

    ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ํŒจํ„ด(P)์—์„œ ๋ถˆ์ผ์น˜ ์ง€์ ์˜ ์™ผ์ชฝ ๋ถ€๋ถ„์ด ๋ณธ๋ฌธ(T)๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ’๋“ค์ด ๋œ๋‹ค.

     

    ๊ฒฝ๊ณ„๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋กœ ์„ค์ •ํ•œ๋‹ค. 

    ๊ฒฝ๊ณ„ ์—†๋Š” ๊ฒฝ์šฐ, ๋”ฐ๋ผ์„œ ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ์—†์„ ๋•Œ๋Š” ๋ฌธ์ž์—ด ํŒจํ„ด์˜ ๊ธธ์ด๋งŒํผ ์ด๋™ํ•œ๋‹ค.

     

    ์ด๋™์‹œ์ผœ ์ค„ ๋•Œ๋Š” ์ ‘๋‘๋ถ€ ์‹œ์ž‘์œ„์น˜์—์„œ ์ ‘๋ฏธ๋ถ€ ์œ„์น˜๋กœ ์ด๋™์‹œ์ผœ์ฃผ๊ณ  ๋‹ค์‹œ ๋ณธ๋ฌธ(T)๊ณผ ํŒจํ„ด(P)์„ ๋น„๊ตํ•œ๋‹ค. 

     

    ๋” ์ž์„ธํ•œ ๊ณผ์ •์€ [๊ทธ๋ฆผ 5]์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    ์‹คํŒจํ•จ์ˆ˜ (Failure Function)

    ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ ์‹คํŒจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. KMP์—์„œ ์‹คํŒจํ•จ์ˆ˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค.

    ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒ(์‹คํŒจ)ํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค๋Š” ์ ์—์„œ ์‹คํŒจํ•จ์ˆ˜๋ผ ๋ถˆ๋ฆฐ๋‹ค. 

     

    ์•„๋ž˜ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฆผ์„ ๋ณด๊ณ  ์‹คํŒจํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š” ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ์‹คํŒจํ•จ์ˆ˜๋ฅผ F(k)๋ผ๊ณ  ํ•  ๋•Œ, F(k)์˜ ์˜๋ฏธ๋Š” k๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ์ ‘๋‘์‚ฌ์™€ ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์ตœ๋Œ€๊ธธ์ด๋ฅผ ๋งํ•œ๋‹ค.

     

    ์‹คํŒจํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฒฝ๊ณ„๋ฅผ ์ฐพ๋Š”๋ฐ ์†Œ์š”๋˜๋Š” ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

    ์‹คํŒจํ•จ์ˆ˜๋ฅผ ๋จผ์ € ๊ตฌํ•ด๋†“์œผ๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋™์ž‘ํ•  ๋•Œ ์ด๋™๊ฒฝ๋กœ๋งŒ ๋ณด๊ณ  ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ๊ฒฝ๊ณ„๋ฅผ ์ฐพ๋Š” ์ผ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    [๊ทธ๋ฆผ 5] KMP ๊ตฌ์ฒด์  ๊ณผ์ •

     

    m = F(m-1)์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์™œ ์‹œ์ผœ์ค„๊นŒ?

    ๋ณธ๋ฌธ(T)๊ณผ ํŒจํ„ด(P)์„ ๋น„๊ตํ•  ๋•Œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋น„๊ต๋ฅผ ํ•œ๋‹ค. 

    m์„ 2(F(5-1)=F(4))๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ๋’€๊ธฐ ๋•Œ๋ฌธ์—  ๋น„๊ต ์‹œ์ž‘ ์ง€์ ์„ ์„ค์ •ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋น„๊ต ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

    ๋”ฐ๋ผ์„œ ํŒจํ„ด(P) BAABAB๊ฐ€ ์žˆ์„ ๋•Œ K=3์ธ B๋ถ€ํ„ฐ๊ฐ€ ํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ K=5์ธ A ๋ถ€ํ„ฐ ๋ณธ๋ฌธ(T)์˜ 5์˜ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ ๋น„๊ต๋ฅผ ํ•œ๋‹ค.

     

    ์ •๋ฆฌํ•˜์ž๋ฉด ๋ณธ๋ฌธ(T)๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ

    ํŒจํ„ด(P)์˜ ์ž๋ฆฌ๋ฅผ ์ด๋™ํ•  ๋•Œ๋Š” begin ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ด๋™์‹œ์ผœ์ค€๋‹ค.

    ์ด๋™ํ•˜๊ณ ๋‚˜์„œ ๋น„๊ตํ•  ๋•Œ์˜ ์‹œ์ž‘์ง€์ ์€ begin๊ณผ m์„ ํ†ตํ•ด ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 

    ์‹คํŒจํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ begin๊ณผ m์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    KMP๋ฒ•์ด ํ•œ ์นธ์”ฉ ์ด๋™ํ•ด์„œ ๋น„๊ตํ•˜๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฒ•๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 


    03 Boyer-Moore๋ฒ•

    Robert S. Boyer์™€ J Stother Moore์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 

    ๊ธฐ์กด ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•๋“ค์ด ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ–ˆ๋‹ค๋ฉด, ๋ณด์ด์–ด-๋ฌด์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•œ๋‹ค. 

    ๊ทธ๋Ÿฌ๋‚˜ ์ด๋™(skip)์„ ํ•  ๋•Œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•˜๋Š” ์ผ๋ฐ˜์  ๋ฐฉ์‹์ด๋‹ค. ์ด ๋•Œ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๊ฑด๋„ˆ๋›ฐ๋ฉด์„œ ๋น„๊ตํ•œ๋‹ค. 

     

     ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ํƒ์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ๋” ํฐ ๊ฐ’๋งŒํผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•˜์—ฌ ํŒจํ„ด ๋งค์นญ์„ ์‹œ๋„ํ•˜๊ฒŒ ๋œ๋‹ค. 

     ์—ฌ๊ธฐ์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ธ Bad Character Rule๊ณผ Good Suffix Rule์„ ๋จผ์ € ์‚ดํŽด๋ณด๊ณ ,  ์‹ค์ œ Boyer-Moore๋ฒ•์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ˜ผํ•ฉํ•˜์—ฌ ๋น„๊ตํ•˜๋Š” ์ง€์— ๋Œ€ํ•˜์—ฌ ๋‹ค๋ค„๋ณผ ๊ฒƒ์ด๋‹ค.

     

    • Bad Character Rule - ๋ฌธ์ž๊ฐ’ ์ด์šฉ
    • Good Suffix Rule  - ๋ฌธ์ž์—ด ์ด์šฉ 
    • BC(Bad Character) & GS(Good Suffix) ํ˜ผํ•ฉ ์‚ฌ์šฉ

    • Bad Character Rule

     Bad Character๋Š” ํ˜„์žฌ ๋น„๊ตํ•˜๋ ค๋Š” ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์€ ์ „์ฒด ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ฅผ ๋งํ•œ๋‹ค.

    ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ b๊ฐ€ Bad Character๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    ์ฆ‰, Bad Character Rule์€ ๋ณธ๋ฌธ(T)์—์„œ ๋น„๊ตํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฌธ์ž๋“ค์€ ๊ฑด๋„ˆ ๋›ฐ๊ณ 

    ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•ด์•ผํ•  ์ง€์ ์„ ์„ ํƒํ•˜์—ฌ ๋ฌธ์ž ๋น„๊ต๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ„ด(P)์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 

    ์—ฌ๊ธฐ์„œ ๋ณธ๋ฌธ์˜ ๋ถˆ์ผ์น˜ ์ง€์  ๋ฌธ์ž์ธ Bad Charater์˜ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด์˜ ๊ฐ’์ด ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ง€์ ์ด ๋œ๋‹ค. 

     

    ์ด์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ณผ์ •์€ [๊ทธ๋ฆผ 6]์„ ํ†ตํ•ด ํ™•์ธํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. 

     

    [๊ทธ๋ฆผ 6]Boyer-Moore : Bad Character Rule์˜ ๊ณผ์ •

    [๊ทธ๋ฆผ 6]์—์„œ 'โ‘ก ๋ณธ๋ฌธ์˜ ๋ถˆ์ผ์น˜ ์ง€์  ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ง€์ ๋งŒํผ ์ด๋™์‹œํ‚จ๋‹ค'

    ์ด ๋ง์ด ์ถฉ๋ถ„ํžˆ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ๋‚˜๋Š” ํ•œ์ฐธ์„ ๋“ค์—ฌ๋‹ค ๋ดค๋‹ค :)

     

    ํ’€์ดํ•˜์ž๋ฉด ์œ„ ๊ทธ๋ฆผ์˜ Step 1์„ ๋ณด๋ฉด '๋ณธ๋ฌธ์˜ ๋ถˆ์ผ์น˜ ์ง€์ ๋ฌธ์ž'๋Š” b(Bad Character)๊ฐ€ ์˜๋ฏธํ•˜๋Š” C์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

    ํŒจํ„ด(P)  CCTTTTGC์—์„œ ๋ถˆ์ผ์น˜ ์ง€์ ์€  T์ด๋‹ค. T๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๊ธ€์ž๋ฅผ ์‚ดํŽด๋ณด๋ฉด CCTT์ด๋‹ค. 

    ์—ฌ๊ธฐ์„œ '์ผ์น˜ํ•˜๋Š” ํŒจํ„ด'์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ๋ณธ๋ฌธ์˜ ๋ถˆ์ผ์น˜ ์ง€์ ๋ฌธ์ž์ธ C์™€ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด ๊ฐ’ C๋ฅผ ๋งํ•œ๋‹ค. 

     

    ๊ทธ๋ ‡๋‹ค๋ฉด '์ผ์น˜ํ•˜๋Š” ํŒจํ„ด์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ'์€ ๋ฌด์Šจ ๋ง ์ผ๊นŒ?

    ์™ผ์ชฝ๊ธ€์ž์ธ CCTT์—์„œ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด๊ฐ’์ธ C ์ค‘ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฐ’์„ ๋งํ•œ๋‹ค. 

    ๋”ฐ๋ผ์„œ CCTT์—์„œ๋Š” ๋‘ ๊ฐœ์˜ C๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐ ๋” ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” C๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ทธ ์ง€์ ๋งŒํผ ์ด๋™ํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค. 

     

    KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํŒจํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ํŒจํ„ด์—์„œ ์–ผ๋งŒํผ ์ด๋™ํ•  ์ง€๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

     


    • Good Suffix Rule 

    Good Suffix Rule์€ ๋ถˆ์ผ์น˜ ์ง€์ ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ,

    ํŒจํ„ด(P)์—์„œ ๋ณธ๋ฌธ(T)๊ณผ ์ผ์น˜ํ•œ ์ง€์ ์˜ ์ ‘๋ฏธ๋ถ€(suffix)์™€ ๋Œ€์‘๋˜๋Š” ์ ‘๋‘๋ถ€(prefix)๋ฅผ ์ฐพ์•„์„œ ํŒจํ„ด์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค. 

    ๋Œ€์‘๋˜๋Š” ์ ‘๋‘๋ถ€๋ฅผ ์ผ์น˜ํ•œ ์ง€์ ์˜ ์ ‘๋ฏธ๋ถ€ ์ž๋ฆฌ์— ์ด๋™์‹œ์ผœ ๋‹ค์‹œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. 

    ๋Œ€์‘๋˜๋Š” ์ ‘๋‘๋ถ€๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ํŒจํ„ด์˜ ๊ธธ์ด๋งŒํผ ์ด๋™ํ•œ๋‹ค.

    ์—ฌ๊ธฐ์„œ ํŒจํ„ด์—์„œ ์ผ์น˜ํ•œ ์ง€์ ์˜ ์ ‘๋ฏธ๋ถ€๋ฅผ Good Suffix๋ผ๊ณ  ๋ณธ๋‹ค.

     

    ์ด๋Š” KMP๋ฒ•๊ณผ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜๋‹ค.

    ๋ณธ๋ฌธ(T)๊ณผ ํŒจํ„ด(P)์„ ๋น„๊ตํ•  ๋•Œ KMP๋Š” ์ผ์น˜ํ•œ ์ง€์ ์˜ ์ ‘๋‘๋ถ€๋ฅผ ์ฐพ๋Š”๋‹ค. 

    ๊ทธ๋Ÿฌ๋‚˜ Boyer-Moore์˜ Good Suffix๋Š” ๋’ค์—์„œ ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๊ธฐ์— ์ผ์น˜ํ•œ ์ง€์ ์˜ ์ ‘๋ฏธ๋ถ€๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

     

    Good Suffix Rule์— ๋Œ€ํ•œ ๊ตฌ์ฒด์  ๊ณผ์ •์€ [๊ทธ๋ฆผ 7]์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    [๊ทธ๋ฆผ 7] Boyer-Moore : Good Suffix Rule์˜ ๊ณผ์ •

     

    [๊ทธ๋ฆผ 7] Step1์—์„œ ํŒจํ„ด  CTTACTTAC์—์„œ TAC๊นŒ์ง€ ์ผ์น˜ํ–ˆ๊ณ  ์ ‘๋ฏธ๋ถ€ TAC์™€ ์ผ์น˜ํ•œ ์ ‘๋‘๋ถ€ TAC๊ฐ€ ์žˆ๋‹ค. 

    ์ด๋ฅผ ๊ทธ๋งŒํผ ์ด๋™์‹œํ‚ค๊ณ  ๋‹ค์‹œ ํŒจํ„ด์˜ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋น„๊ตํ•œ๋‹ค.

     

    [๊ทธ๋ฆผ 7] Step2์—์„œ ํŒจํ„ด CTTACTTAC๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๋ณธ๋ฌธ๊ณผ ์ผ์น˜ํ•œ ๋ถ€๋ถ„ TACTTAC์ด ์ ‘๋‘๋ถ€์—์„œ CTTAC์™€ ์ผ์น˜ํ•œ๋‹ค.

    ์ด ๋ถ€๋ถ„์„ ๋งž์ถฐ ์ด๋™์‹œํ‚ค๊ณ  ๋‹ค์‹œ ํŒจํ„ด์˜ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•œ๋‹ค.

     


    • BC(Bad Character) & GS(Good Suffix) ํ˜ผํ•ฉ ์‚ฌ์šฉ

    ๋ณธ๋ฌธ๊ณผ ํŒจํ„ด์„ ๋น„๊ตํ•˜๋Š”๋ฐ ๋ถˆ์ผ์น˜ ์ง€์ ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ

    Bad Character๋Š” ๋ฌธ์ž๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ด๋™ํ•œ๋‹ค๋ฉด Good Suffix ๋Š” ๋ฌธ์ž์—ด์„ ์ด์šฉํ•ด์„œ ์ด๋™ํ•œ๋‹ค.

    ๊ทธ๋ ‡๊ธฐ์— ์ฃผ๋กœ ๋ฌธ์ž์—ด์ด ๋งค์นญ๋œ ๊ฒฝ์šฐ์—๋Š” Good Suddix๋ฅผ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” Bad Character๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ skip ๊ฐ’์ด ๋” ํฌ๋‹ค. 

     

     

    [๊ทธ๋ฆผ 8] Boyer-Moore : ํ˜ผํ•ฉ ์‚ฌ์šฉ

     

    BC (Bad Character)์™€ GS (Good Suffix) ์ค‘์—์„œ ํ•˜๋‚˜๋งŒ์œผ๋กœ๋Š” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ด๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. 

    [๊ทธ๋ฆผ 8] Step1, Step2์ฒ˜๋Ÿผ ํ•œ์ชฝ๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” skipํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, 1byte์”ฉ ๊ฒ€์‚ฌํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ๋“ค์ด ๋‚˜์˜จ๋‹ค.

    Step 1์—์„œ์˜ gs:0, Step 2์—์„œ์˜ bs:0์ด 1byte์”ฉ ๊ฒ€์‚ฌํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

    ๋˜๋Š” Step3์—์„œ๋Š” GS๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋” ๋งŽ์€ skip์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, BC๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด 2byte๋งŒ skipํ•˜์ง€ ๋ชปํ•œ๋‹ค.

    ์ด์ฒ˜๋Ÿผ BC, GS๊ฐ’์„ ์ตœ์ข…์ ์œผ๋กœ ๋น„๊ตํ•ด์„œ ๋” ํฐ๋ฐฉํ–ฅ์œผ๋กœ skipํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์ด ๋˜์–ด์•ผํ•œ๋‹ค.


    04 ์•Œ๊ณ ๋ฆฌ์ฆ˜  ๊ฐ„๋‹จ ์š”์•ฝ & ๋น„๊ต 

    ๋ธŒ๋ฃจํŠธ ํฌ์Šค 

    ํŒจํ„ด์˜ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•ด๊ฐ€๋ฉด์„œ ๋ณธ๋ฌธ์˜ ํ…์ŠคํŠธ ๋ฌธ์ž์™€ ํ•˜๋‚˜์”ฉ ๋น„๊ต

     

    KMP

    ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•ด๊ฐ€๋ฉด์„œ ๋ถˆ์ผ์น˜ ์ง€์ ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ

    ํŒจํ„ด๊ณผ ๋ณธ๋ฌธ์ด ์ผ์น˜ํ•˜๋Š” ๊ฐ’ ์‚ฌ์ด์—์„œ ํŒจํ„ด์˜ ์ ‘๋‘๋ถ€์™€ ์ ‘๋ฏธ๋ถ€๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ณ„๋ฅผ ์ฐพ๊ณ  ์ด๋™์‹œ์ผœ์ฃผ๋ฉด์„œ ๋น„๊ต 

     

    Boyer-Moore

    ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ (์ด๋™๋ฐฉํ–ฅ์€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ )

    ๋ถˆ์ผ์น˜ ์ง€์  ๋ฐœ์ƒ ์‹œ  ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ๋” ํฐ ๊ฐ’๋งŒํผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•˜์—ฌ ํŒจํ„ด ๋งค์นญ์„ ์‹œ๋„

    (๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹ : Bad Character ๋ฌธ์ž๊ฐ’ ์ด์šฉํ•ด์„œ ์ด๋™ / Good Suffix  ๋ฌธ์ž์—ด ์ด์šฉํ•ด์„œ ์ด๋™)

     

      ๋ธŒ๋ฃจํŠธ ํฌ์Šค KMP Boyer-Moore
    ๋น„๊ต๊ธฐ์ค€ ๋ฌธ์ž๊ฐ’ ๋ฌธ์ž์—ด ๋ฌธ์ž๊ฐ’ & ๋ฌธ์ž์—ด
    ํ˜ผํ•ฉ ์‚ฌ์šฉ
    ๋น„๊ต๊ฒ€์‚ฌ
    ๋ฐฉํ–ฅ

    (์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ)

    (์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ)

    (์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ)
    ์ด๋™๊ฐ„๊ฒฉ ํ•œ ์นธ
    ํŒจํ„ด(P) ๊ธ€์ž์ˆ˜ ์ด๋‚ด
    ํŒจํ„ด(P) ๊ธ€์ž์ˆ˜ ์ด๋‚ด
    ์ด๋™๊ฒฝ๋กœ
    ์ €์žฅ์—ฌ๋ถ€
    x O(์‹คํŒจํ•จ์ˆ˜) O(์ด๋™๊ฒฝ๋กœ ํ…Œ์ด๋ธ”)
    ์‹œ๊ฐ„๋ณต์žก๋„  O(NM) O(N+M) Best : O(N+M/M)
    Worst : O(NM)
    ๋ณธ๋ฌธ(T)์˜ ๋ฌธ์ž์—ด ๊ธธ์ด : N   /  ํŒจํ„ด(P)์˜ ๋ฌธ์ž์—ด ๊ธธ์ด : M

    โ€ป ์ถœ์ €

    - ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ : https://hcr3066.tistory.com/26

     

    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•[์ „์ฒด ํƒ์ƒ‰] - ๋ธŒ๋ฃจํŠธ ํฌ์Šค(brute force)

    ์•”ํ˜ธํ•™์—์„œ์˜ ๋ธŒ๋ฃจํŠธ ํฌ์Šค(brute force attack)๊ฐ€ ์•„๋‹Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ธŒ๋ฃจํŠธ ํฌ์Šค(brute force search)์— ๊ด€ํ•œ ๊ฒƒ์„ ์ž‘์„ฑํ•œ๋‹ค. ๋ธŒ๋ฃจํŠธ ํฌ์Šค(brute force) brute: ๋ฌด์‹ํ•œ, force: ํž˜ ๋ฌด์‹ํ•œ ํž˜์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค...

    hcr3066.tistory.com

    - KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1 : https://carstart.tistory.com/143

     

    [์•Œ๊ณ ๋ฆฌ์ฆ˜] KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ (๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ #2)

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ .. ์ด ์—ญ์‹œ ์ด์ „ ์นดํ”„๋ผ๋นˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ด์–ด์„œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ์žˆ์–ด ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. (http://c..

    carstart.tistory.com

    - KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2 : https://baeharam.github.io/posts/algorithm/kmp/

     

    [์•Œ๊ณ ๋ฆฌ์ฆ˜] KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ๊ฐœ๋ฐœ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ '[์•Œ๊ณ ๋ฆฌ์ฆ˜] KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜'์„ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์„ธ์š”.

    baeharam.github.io

    - Boyer-Moore : https://m.blog.naver.com/PostView.nhn?blogId=cestlavie_01&logNo=221055516242&proxyReferer=https:%2F%2Fwww.google.com%2F

     

    ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ - Boyer-Moore algorithm

    ๊ฐœ์š”๊ธฐ์กด์˜ ๊ฒ€์ƒ‰๋ฐฉ๋ฒ•๋“ค์ด ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ–ˆ๋‹ค๋ฉด, ๋ณด์ด์–ด-๋ฌด์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜ค๋ฅธ์ชฝ์—์„œ ...

    blog.naver.com

    ๋Œ“๊ธ€

Designed by Tistory.