a1.散列。非常快的數據結構,而且較容易實現
a2.平衡樹。這個結構即使是在輸入不正當的情況下也有非常好的性能,並且已經優雅地打包到了C++標準模板庫set和map的大多數實現中。
a3.後綴數組。初始化指向文本串中的每個字符的指針數組,將其排序,這樣就得到了一個後綴數組。然後你就可以掃描該數組,找到其最近的字符串或使用二分查找法查找單詞或詞組。
b、使用庫還是定製的組件?
C++的set、map和string使用起來都非常方便,便是其通用而強大的接口意味着其效率沒有專用的散列函數高。其他庫組件的效率很高:散列使用的strcmp,後綴數組使用的qsort。我看了一下bsearch和strcmp的庫實現,來創建馬爾科夫程序中的二分查找和wordncmp函數。