我寫了一個程序,生成一個md5哈希到打印出來的賬單上。我希望能夠根據生成的哈希列表來檢查哈希。然後,我使用Levenshtein距離函數來確定哪個散列與打印出的帳單之間的編輯距離最短。需要幫助加快計算
這裏是我的代碼:
func checkIfBillIsLegit(stringToCheck:String) -> Bool {
for i in 0...((secretWords.count)) { // for loop runs about 5 times
let hashs = String().generateAll(secretWords[i]) // create the md5 hashs to check against, returns an array with 50 elements
for j in 0...(hashs.count) {
if (stringToCheck.minimumEditDistance(hashs[j]) < 5) { // Levenshtein distance function
print("legit")
print(secretWords[i])
return true
}
}
}
print("not legit")
return false
}
我希望能夠以每秒多次運行此方法。它現在可以工作,但對於我想要做的事來說,它稍微慢了一點。問題是,generateAll()方法太慢,無法每秒生成50次散列。我想在這個方法之外調用generateAll,但我無法弄清楚我將如何跟蹤列表?
任何幫助,將不勝感激。
generateAll()方法:
'secretWords'數組多久更改一次? – Paulw11
secretWords的數組在該視圖控制器之外發生變化。我們可以認爲它從不改變。 – mawnch
所以你可以計算一次哈希值,並將每個單詞的散列數組存儲在一個字典中[String:[Hash]]。您可以使用懶惰屬性,以便散列在第一次需要時進行計算。或者,您可以計算字典未命中的散列值,因此如果將單詞添加到數組中,系統將自動計算新的散列值。你也可以使用'NSCache'而不是字典 – Paulw11