本記事の内容
本記事はハミンググラフとハミング距離について解説する記事です。
本記事を読むにあたり、距離関数とグラフについて知っている必要があるため、以下の記事も合わせてご覧ください。
↓グラフの記事
↓距離関数の記事
ちょっとだけイントロ
ハミンググラフとハミング距離は情報理論に登場します。
今回はグラフ理論の応用例を紹介、解説する記事ということです。
我々はアルファベットや平仮名や漢字を適当な長さで組み合わせることで単語を作り、それを助詞(英語にはありませんが)や接続詞を使って単語をつなげて文章にし、意思疎通をします。
とはいえ、たとえ日本人だったとしても「すうがく」を「すうらく」と噛んでしまったり、文章を書いているときに「です。」を「だす。」のように書き間違えたり、タイプミスで「箸」を「橋」としたりすることがあります。
英語なら尚の事です。
この「単語と単語との距離」がハミング距離です。
ハミング距離
では、早速内容に入ります。
アルファベット、符号
ここでは、「アルファベット(文字)」と「文字列(符号)」というものを以下で定まるモノとします。
文字、文字列
WWを有限集合とし、V=W×⋯×WV=W×⋯×W (nn個の直積)とする。WWの要素を文字(letter)あるいはアルファベット(alphabet)という。VVの要素は長さnnの文字列あるいは符号(code)と呼ぶ。上のようにVVを定めているので、|V|=|W|n|V|=|W|nです。
現実に即した形で述べれば、WWが英語のアルファベットの集合だとすると|W|=25|W|=25です(現実のアルファベットは25個なので)。
しかし、今回はそれは仮定せずに、WWは単に有限集合とします(WWは日本語の平仮名の集合でも良いし、ギリシャ語のアルファベットでも良いし、ロシア語のアルファベットでも良いからです)。
文字列の遠近
VVの2つの要素
a=(a1,…,an)(ai∈W),b=(b1,…,bn)(bi∈W)a=(a1,…,an)(ai∈W),b=(b1,…,bn)(bi∈W)
に対して、
d(a,b)=|{i∈{1,…,n}| ai≠bi}|d(a,b)=|{i∈{1,…,n}| ai≠bi}|
とします。
要するに、長さが同じ文字列aaとbbが何文字異なるか、ということを表しているのが関数ddです。
例えば、n=12n=12として、WWを英語のアルファベットとします。
つまり、
W={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}W={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}
として、
V=W12V=W12
とします。
ここで、
a=(c,o,n,f,i,r,m,a,t,i,o,n),b=(c,o,n,f,o,r,m,a,t,i,o,n),c=(c,o,n,g,r,e,g,a,t,i,o,n),a=(c,o,n,f,i,r,m,a,t,i,o,n),b=(c,o,n,f,o,r,m,a,t,i,o,n),c=(c,o,n,g,r,e,g,a,t,i,o,n),
とすると、
d(a,b)=1,d(a,c)=4d(a,b)=1,d(a,c)=4
です。
余談(confirmation, conformation, congregation)
ちなみに、confirmationは「確認」、conformationは「整合」あるいは「形態」、congregationは「集まり」です。このことから、dは2つの文字列の「遠近」を測るのに適しているだろう、ということが分かります。
dは距離関数です。(ハミング距離)
先のdは距離関数です。
距離関数とは以下でした。
距離関数、距離空間
集合Vにおいて、次の性質を満たすd:V×V→RをV上の距離関数(distance function, metric)という。- d(x,y)≥0であり、d(x,y)=0⇔x=y
- d(x,y)=d(y,x)
- d(x,y)+d(y,z)≥d(x,z)(三角不等式)
つまり、dを
d(a,b)=|{i∈{1,…,n}| ai≠bi}|
とするとき、以下の3つが成り立ちます。
- d(a,b)≥0であり、d(a,b)=0⇔a=b
dは集合の要素の個数なので、任意のa,b∈Vに対してd(a,b)≥0です。
また、任意のa,b∈Vに対して、a=bであれば、aとbは同じ文字列ということですので、d(a,b)=0です。
逆に、d(a,b)=0であれば、文字列aと文字列bには異なる文字が存在しないので、a=bです。 - d(a,b)=d(b,a)
文字列aと文字列bの異なる文字の個数と文字列bと文字列aの異なる文字の個数は一致しているため、d(a,b)=d(b,a)です。 - d(a,b)+d(b,c)≥d(a,c)(三角不等式)
任意のVの要素
a=(a1,…,an),b=(b1,…,bn),c=(c1,…,cn)
に対して
A={i| ai=bi},B={j| bj=cj},C={k| ck=ak}
とおくと、A∩B⊂Cが成り立ちます。
補集合を考えることにより、Ac∪Bc⊃Cc(ただし、Acは{1,…,n}におけるAの補集合を指します)。
dの定め方から、
d(a,b)=|Ac|,d(b,c)=|Bc|,d(a,c)=|Cc|
だから、
d(a,C)=|Cc|≤|Ac∪Bc|≤|Ac|+|Bc|=d(a,b)+d(b,c)
従って、dは距離関数です。
個のdをハミング距離といいます。
ハミング距離
長さnの文字列a,b∈Vに対して、 d(a,b)=|{i∈{1,…,n}| ai≠bi}| とし、この距離dをハミング距離(Hamming distance)という。ハミンググラフ
先程定めた文字列の集合V=Wn(Wは有限集合)を頂点の集合とするグラフXを考えます。
辺の繋がり方については
で定めます。
つまり、2つの文字列a,bが辺で結ばれるのは、文字列の中の1箇所だけが異なり、他では一致するときです。
この操作で出来るグラフXをハミンググラフといいます。
ハミンググラフ
文字列の集合V=Wn(Wは有限集合)を頂点の集合とし、ハミンググラフの性質
ハミンググラフの性質について解説します。
命題1.
ハミンググラフは連結である。命題1.の証明
a,b∈Vを任意の取って、d(a,b)=sとします。
このとき、次を満たすVの要素c0,c1,…,csが存在することを示せばOKです。
c0=a,cs=b,d(ci−1,ci)=1 (i=1,2,…,s)
a=(a1,…,an)とb=(b1,…,bn)が異なる成分を持つ番号をk1<⋯<ksとするとき、c1はc0=aのk1番目の成分をbの対応する成分で置き換えたものとして、機能的にci−1まで定まったときに、ciはci−1のki番目の成分をbの対応する成分で置き換えたものとします。
例えば、先程の例の
a=(c,o,n,f,i,r,m,a,t,i,o,n),b=(c,o,n,f,o,r,m,a,t,i,o,n)
のとき、
c1=(c,o,n,g,i,r,m,a,t,i,o,n),c1=(c,o,n,g,r,r,m,a,t,i,o,n),c1=(c,o,n,g,r,e,m,a,t,i,o,n),c1=(c,o,n,g,r,e,g,a,t,i,o,n)
です。
従って、連結です。
命題1.の証明終わり
以下、文字の数はqとします。
すなわち、q=|W|とします。
命題2.
ハミンググラフX=(V,E)は正則グラフであり、その次数はn(q−1)である。命題2.の証明
a=(a1,…,an)∈Vに対して、b=(b1,…,bn)でd(a,b)=1となるのは、文字列bの1箇所のみがaと異なるときです。
異なる場所をi番目とすると、i番目のところでaiと異なる文字の個数は|W|−1=q−1です。
また、ことなる場所の数はn個なのだから、次数はn(q−1)となって、Xは正則グラフです。
命題2.の証明終わり
ハミンググラフの例
情報理論で使われる文字の集合はW={0,1}です。
この場合のハミンググラフはn−正則グラフです(n(q−1)=n(2−1)=n)。
長さnの文字列をRmの座標と考えることにより、VはRnの部分集合と同一視出来ます。
- n=1のとき、V={0,1}、
- n=2のとき、V={(0,0),(0,1),(1,0),(1,1)}、
- n=3のとき、V={(0,0,0),(1,0,0),(0,1,0),(0,0,1),(1,1,0),(1,0,1),(0,1,1),(1,1,1)}
次の図はn=1,2,3のハミンググラフです。

これらのグラフの頂点の集合は、それぞれ、線分[0,1]、正方形{(x,y)|0≤x,y≤1}、立方体{(x,y,z)|0≤x,y,z≤1}の頂点の集合に対応しています。
ちなみに、n=4の場合、4次元立方体{(x,y,z,w)|0≤x,y,z,w≤1}を図に描くことはできませんが、その頂点と辺からなるハミンググラフは以下のように描くことが出来ます。

皆様のコメントを下さい!
前回の記事で紹介したジョーク
ある人「もし死人(DEAD people)のみが16進数を理解できるなら、16進数を理解できるのは何人でしょうか?」
数学者「…人だね。」
の答えは
数学者「57005人だね。」
です。
DEADを数の16進数表記だとして、DEADを10進数表記にすると57005だからです。
今回はクイズではなく、紹介だけにします。
この世の中には10種類の人間しかいない。2進数を理解する人間と理解しない人間だ。
このようなジョークをご存じの方はぜひコメントで教えて下さい!
結
今回は、ハミング距離とハミンググラフについて解説しました。
それぞれ情報理論で出現するものです。
ハミンググラフは正則行列であるとともに、実数の直積と同一視出来るため、4次元など図形として描けないものもハミンググラフとして表現することが出来ます。
次回は誤り訂正可能符号について解説します。
乞うご期待!
質問、コメントなどお待ちしております!
どんな些細なことでも構いませんし、「定理〇〇の△△が分からない!」などいただければ全てお答えします!
お問い合わせの内容にもよりますが、ご質問はおおよそ3日以内にお答えします。
もし直ちに回答が欲しければその旨もコメントでお知らせください。直ちに対応いたします。
コメントをする
n=3のときのグラフの辺が一本抜けているようです!
へかてい様
返信が遅れてしまい、申し訳ございませんでした。
ご指摘ありがとうございます!
訂正いたしました。