iwehdio的:
如何評測串匹配演算法的效能?
蠻力匹配:
版本2:
int match ( char* p, char* t )
if ( j >= m ) break; //找到匹配子串
}return i;
}
唯一的區別就是版本1中i指向文字t中進行比較的位置,版本2中i指向模式t開始比較的位置。
最壞情況下可達到o(m*n)。
低效的原因在於,之前比對過的字元,將在模式t失陪進製後再次比較。
kmp演算法:
實現:
int* buildnext ( char* p ) else //失配
t = n[t];
return n;
}
時間複雜度o(n),n為t的規模。
再改進:
bm演算法:
壞字元(bc):
好字尾(gs):
位移量根據bc表和gs表選擇較大者。
時間複雜度最好o(n/m),最壞o(n+m)。
kr演算法:
iwehdio的:
資料結構(十一) 串
上一章我們說了棧與佇列這種基礎的資料結構,這一章我們簡單的來說說另一種資料結構 串,首先我們來了解下串是什麼?串 string 是由零個或多個字元組成的有限序列,又名叫字串。一般記為s a1a2 an n 0 其中,s 是串的名稱,用雙引號 有些地方也用單引號 括起來的字串行是串的值,注意單引號不屬...
資料結構與演算法(十一)遞迴
什麼是遞迴?程式呼叫自身的程式設計技巧稱為遞迴 recursion 遞迴作為一種演算法在程式語言中廣泛使用。乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉換為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重...
資料結構與演算法(二十一)
插入排序回顧 插入排序演算法 definsertsort alist for index in range 1 len alist currentvalue alist index position index while position 0and alist position 1 current...