我先拋磚引玉寫幾個topic,而後我會指定大家中的一些領域專家分享本身的知識,固然也歡迎大家毛遂自薦。html
這是我之前愛用的面試題,即便不考慮科學計數法和其它進制,短期寫出正確程序仍然不易(須要考慮溢出)面試
設計安全機制,在服務正經常使用戶的同時,拒絕非法訪問算法
a) 每一個數出現的機率均等數組
b) 它們在1到n之間安全
c) 它們各不相同服務器
d) 效率較高ide
這5道題若是你能不借助任何外力,作出4道,請來找我。加密
進入正題:url
字符串處理在工做中常常遇到,最有名的算法就是kmp。可是,它有幾個缺點:spa
1. 只能單字符串;
2. 須要預處理;
3. 其實,它的速度不是最快的……出名只是由於在教材中;
4. 不能處理最長公共子串等其它非匹配問題。
事實上,字符串處理博大精深:
在長度爲n的匹配串中查找長度爲m的模式串是否出現,以及出現的位置
a) Brute Force
從左到右一個字符一個字符比較
時間複雜度O(n*m)
b) KMP
最有名的算法,教科書中,做者之一(K)是圖靈獎得主
核心思想是,充分利用m的特性,匹配失敗時,儘量多地移動模式串,以減小比較次數
時間複雜度O(n)
http://jpkc.nwu.edu.cn/datastr/study_online/newsite/pluspage/kmp.htm
c) Horspool
從右到左比較
當匹配失敗時,模式串從不匹配字符處向左尋找匹配串中不匹配的字符,若找到取最靠右的那個,移動模式串對齊;若找不到,移動模式串到不匹配字符處右方
時間複雜度平均O(n),最壞O(n*m)
http://www.cnblogs.com/dsky/archive/2012/04/24/2467655.html
d) BM
這個算法的實際效果比KMP快數倍;是邏輯上最複雜的算法
至關於KMP和Horspool的結合
時間複雜度O(n)
http://blog.csdn.net/iJuliet/article/details/4200771
e) Sunday
這是我我的最喜歡的算法,比BM快,同時很簡潔
其它和Horspool相似,只是比較的不是不匹配的字符,而是匹配串中下一位字符
http://baike.baidu.com/view/6325831.htm?fr=aladdin
f) Rabin-Karp
以串而不是字符爲單位,串映射爲值;值同樣再繼續比較
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm
在不少匹配串(字典)中查找長度爲m的模式串
a) Trie
我我的比較喜歡的一種算法,普遍應用於tips(搜索提示)、禁詞過濾等
http://zh.wikipedia.org/zh/Trie
b) Aho–Corasick
有限狀態自動機+KMP
http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
後綴數組是字符處理的利器,普遍應用於求最長前綴、最長公共子串、最長遞增子串、最長迴文子串和最長重複子串等。
若是參加ACM,此技能必須掌握。