2015-03-13 115 views
0

我是F#的新手。這是我的第一個函數式編程語言。F#:如何計算海明距離?

我想寫一個算法來計算兩個長度相等的字符串之間的漢明距離。如何在F#中這樣做?任何由僞代碼組成的例子將不勝感激。

回答

6

您可以使用Seq.map2比較對應的值再總結的區別:

let hamming s1 s2 = Seq.map2((=)) s1 s2 |> Seq.sumBy(fun b -> if b then 0 else 1) 
+0

這是一個非常好的解決方案! – oopbase 2015-03-13 13:01:27

3

也許認爲這http://davefancher.com/tag/hamming-distance/?還是有什麼特別的理由,它不符合你的要求?從鏈接頁面:

let hammingDistance (source : string) (target : string) = 
    if source.Length <> target.Length then failwith "Strings must be equal length" 

    Array.zip (source.ToCharArray()) (target.ToCharArray()) 
    |> Array.fold (fun acc (x, y) -> acc + (if x = y then 0 else 1)) 0 

hammingDistance "abcde" "abcde" |> printfn "%i" // 0 
hammingDistance "abcde" "abcdz" |> printfn "%i" // 1 
hammingDistance "abcde" "abcyz" |> printfn "%i" // 2 
hammingDistance "abcde" "abxyz" |> printfn "%i" // 3 
hammingDistance "abcde" "awxyz" |> printfn "%i" // 4 
hammingDistance "abcde" "vwxyz" |> printfn "%i" // 5