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

F#: How to calculate Hamming distance?

我是 F# 新手。这是我的第一门函数式编程语言。

我想写一个算法来计算两个等长字符串之间的汉明距离。在 F# 中如何做到这一点?任何包含伪代码的示例将不胜感激。

您可以使用Seq.map2比较相应的值然后求和:

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

也许可以考虑这个 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