読者です 読者をやめる 読者になる 読者になる

Rubyでハミング距離とハミング重みを求める

出てくる言葉の意味

二元有限体における加算は排他的論理和(XOR)で表すことができる.符号同士の加算にはこのXORを用いる.

+ 0 1
0 0 1
1 1 0

ハミング距離・・・異なる値を持つビット位置の数

ハミング重み・・・{x_{i} \neq 0}となるビット位置の数

Ruby排他的論理和

Ruby排他的論理和(XOR)を求めるには^を用いる

[1] pry(main)> 0^0
=> 0
[2] pry(main)> 0^1
=> 1
[3] pry(main)> 1^0
=> 1
[4] pry(main)> 1^1
=> 0

これを用いればハミング距離とハミング重みを求められる.Rubyで以下のように書いた.

Hamming distance and weight

hamming_distance([0,1,1,0,1],[0,1,0,1,0])
=>3

hamming_weight([0,0,1,1,0])
=>2

このような出力になる.とても簡単.Ruby排他的論理和初めて使った.もっとスマートなやり方あったらぜひ教えてください. 本当は{tex}でハミング距離とかの定義式書きたかったけど,ちょっと書きにくかったのでやめた.

定義式見てて思ったのはHaskell使えばもっと素敵な感じで書けそう.