字串演算法Strin更lgorithms资料讲解.pptxVIP

  • 0
  • 0
  • 约3.4千字
  • 约 39页
  • 2019-11-30 发布于天津
  • 举报
字串演算法 String Algorithms本次大綱1 - 一些基本的字串演算法符號名詞介紹2 - Rabin Karp簡介3 - 自動機的演算法簡介4 - KMP演算法本體介紹5 - 嗚喔 好題目符號Σ 組成字串的字元集合|Σ|組成字串的字元集合大小Σ* 由Σ所組成的所有”有限長度”的字串ε 空字串 屬於Σ* 名詞Prefix 一字串的前置 譬如字串abcccd abc是他的前置 ab也是他的前置 也是abc的前置Suffix 譬如字串abcccd cccd是他的前置 ccd也是他的前置 也是cccd的前置Rabin Karp Algorithms想法核心:把一個字串看成數字若一個字串abcdabc想法:視為1234123先不考慮一個字串是否會overflow把字串”轉換成”數字去做比對Rabin Karp AlgorithmsRabin Karp Algorithms波動拳 ↓ → + ARabin Karp Algorithms昇龍拳 →↓ → + ARabin Karp Algorithms這是我自己”實作”的應用如果遊戲你用字串比對是用迴圈去比對招數表,同時間需要的次數一多可能就會慢如此就可能會發生…Rabin Karp AlgorithmsRabin Karp Algorithms實作上,Rabin Karp對於一個產生數字不大(在INT或LONG LONG) 的字串集合 有相當大的優勢 (譬如遊戲招數)所以問題應該經由分析之後,才確認採用何種演算法,並不是某一種演算法都一定比較快Rabin Karp Algorithms最後實作細節:你可能發現升龍拳跟波動拳字串不一樣長了假設你現在得到數字x比對波動拳用(x)%(N)^3 (有三個按鍵要比對)升龍拳用(x)%(N)^4(有四個按鍵要比對)其他相關的細節問題 也可以用modulus來解決String Matching With finte automata想法核心:想成一個自動機的狀態轉移初始狀況為q0所有狀況為Q這個集合當在一狀況q下 遇到字元alpha那麼下一個狀態會依循著這新的指令轉移String Matching With finte automata如果將狀態看成一個數字 其實就跟Rabin Karp很類似了 假設目前狀態是15456,得到新的字元g,他代表7這個數字,那新的狀態就是154567那字串比對的目標就是一個Final State假設自動機到了最終狀態 那代表已經讀到了一個要尋找的字串本篇將不再多在此處著墨,有興趣的人可以閱讀Introduction to algorithms 2/e的page 916 – page 922 KMP Algorithms核心觀念:將之前比對過的資料充分利用實作資訊:Si代表一字串從S[0]…S[i]failure function definition : failure[i]代表最長Si的prefix與他自己的suffix相符是多少 而failure[i] i (注意這個限制!)KMP Algorithmsfail function diagram(圖例)Ex: Sq = abcwerabc則failure[q] = ?以本例的話 failure[q] = 2因為Sq的prefix最長S2與後面Sq的suffix相等雖然S1也符合 但是S2才是最長的KMP AlgorithmsKMP AlgorithmsHow to use failure function主要字串比對字串當比對出錯誤時,我們可以怎麼省工夫?這兩段相同你會發現這段字串跟綠色字串的關係 (繼續...)KMP Algorithms目前的狀況T’’ =Sub’ =有多少已經比對過?我們會想知道Sub ”已經知道”的Prefix最長可以跟T’的Suffix相同的 是到哪邊KMP Algorithms新的比對的狀況我們知道因為上下兩個子字串完全相等那這三格是”最長”的prefix of T’’等於suffix of Sub’因此就不會有”更好”的”省略比對”選擇了KMP Algorithms新的比對的狀況省略不必要的比對我們就拿Sub第四個元素重新與T第十個元素比對你會發現找這個最長的prefix步驟其實就是假設比對到Sub[j]不符合的時候就可以直接省略比對failure[j]個字元 並”重新比對一次”該字元KMP Algorithms萬一又不符合 就不斷重複這樣的步驟一樣省略不必要的比對 採用策略一樣是尋找最長的prefix與suffix相等的情況我們就拿Sub第二個元素重新與T第十個元素比對這樣的步驟將持續到 j = -1或者Sub[j] 跟 T[i]相等KMP Algorithms狀態的轉移其實這樣的步驟 就是在使得狀態轉移轉移的是j

文档评论(0)

1亿VIP精品文档

相关文档