在看《編程珠璣》變位詞程序的時候看到簽名算法的思想非常好...
Soundex是一種語音算法,利用英文字的讀音計算近似值,值由四個字符構成,第一個字符爲英文字母,後三個爲數字。在拼音文字中有時會有會念但不能拼出正確字的情形,可用Soundex做類似模糊匹配的效果。
之前做過模糊匹配,用的是正則表達式。但顯然,用簽名算法的效率更高。
算法簡要說明
- 將英文字按以下規則替換(除第一個字符外):
a e h i o u w y -> 0 b f p v -> 1 c g j k q s x z -> 2 d t -> 3 l -> 4 m n -> 5 r -> 6
- 去除0,對於重複的字符只保留一個
- 返回前4個字符,不足4位以0補足
以Knuth和Kant爲例:
Knuth -> K5030 -> K53 -> K530 Kant -> K053 -> K53 -> K530
http://zh.wikipedia.org/wiki/Soundex