F#:如何计算海明距离?

问题描述:

我是F#的新手。这是我的第一个函数式编程语言。F#:如何计算海明距离?

我想写一个算法来计算两个长度相等的字符串之间的汉明距离。如何在F#中这样做?任何由伪代码组成的例子将不胜感激。

您可以使用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

也许认为这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