看板 TransCSI 關於我們 聯絡資訊
※ 引述《cocaincola (☆★)》之銘言: : Show that the following brute-force string matching algoritm takes average : linear time to report all occurrences of a pattern string p in a text : string t. : 1:Let m = length of p;n=length of t; : 2:for i = 1 to n-m+1 do : 3: j=1; : 4: while j<=m and p[j]=t[i+j-1] do : 5: j=j+1; : 6: if j>m then : 7: Print i ; 還真是暴力的字串搜尋演算法阿 解說一下 因為要搜尋的字串長度為m,從第一個字開始對的話只要對到文件長度的n-m+1處就可以 裡面會開始做字串比對 i指向目前文件中被抓來跟字串p比對的m個字的第一個字 j指向p字串跟拿來比對的那m個字中目前正在比對的字 然後只要j沒有大於m,然後對照的字又一樣, 就會持續把j+1直到j大於m或比對的字不一樣 這會造成一個情況就是,如果抓來比對的這m個字跟字串p完全一樣,就會把j加到大於m 於是乎就會把i值印出來,表示在第i個字找到字串p 我個人建議最好把演算法會做的事情畫出來,並配合幾個情況演練一下就知道了 不用實際去做一個文件來比對,只要設定p字串的長度m跟比m大的文件長度n 最後再來假設 1. p[j]不等於t[i+j-1] 2. p[j]等於t[i+j-1],但不是連續m次都這樣 3. 連續m次都是p[j]等於t[i+j-1] 這樣你會更清楚這演算法怎麼做 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.92.133