印刷された請求書に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()メソッドが遅すぎて1秒あたり50ハッシュを生成できないことです。私はこのメソッドの外でgenerateAllを呼び出すことを考えていましたが、どのようにリストを追跡することができるのか分かりません。
ご協力いただければ幸いです。
generateAll()メソッド:
「secretwords」の配列はどのくらいの頻度で変更されますか? – Paulw11
このビューコントローラの外でsecretwordsの変更の配列。私たちはそれが決して変わらないと考えることができます。 – mawnch
ハッシュを一度計算し、各単語のハッシュの配列を辞書[String:[Hash]]に格納することができます。遅延プロパティを使用すると、ハッシュが最初に必要なときに計算されます。あるいは、辞書ミスのハッシュを計算することができるので、単語が配列に追加されると、システムは自動的に新しいハッシュを計算します。あなたは辞書ではなく 'NSCache'を使うこともできます – Paulw11