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
我是 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