■幾何学におけるマイ未解決問題(その13)
(その12)では1列目と2列目以降のギャップが問題となった.それを逆手にとると,アルゴリズムを単純化することができそうだ.
===================================
2つの多面体,たとえばw1=(010110)とw2=(101001)の距離を求めることを考える.
[1]それぞれの群内のハミング距離を求める.たとえば
b1=(010010)とw1のハミング距離は1
b2=(100001)とw2のハミング距離は1
[2]b1とb2のマンハッタン距離を求める.まず,横方向の差であるが,
b=(01,・・,0u,1,01,・・,0v,1,01,・・,0w)
を
b=(01,・・,0u,1,01,・・,0w)=「1」
または
b=(01,・・,0u,1,1,01,・・,0w)=「11」
に変換する.
1つ左にいくと左右のポインタが1つずつ内側に,1つ右にいくと左右のポインタが1つずる外側に移動するから,vが偶数の場合のステップ数はv/2,奇数の場合は(v+1)/2,すなわち,いずれの場合も
[(v+1)/2]
ステップとなる.
b1=(010010)→(001100)になるステップ数は1
b2=(100001)→(001100)になるステップ数は2
その差は1である.
[3]次に,縦方向の差を求める.1の数が同じ場合,たとえば,
b1=(001100),b2=(110000)→差は4
b1=(001100),b2=(010000)→差は2
b1=(001100),b2=(001100)→差は0
b1=(001100),b2=(000110)→差は2
b1=(001100),b2=(000011)→差は4
すなわち,1ビットのシフトは2差に相当する.
b1=(001000),b2=(100000)→差は4
b1=(001000),b2=(010000)→差は2
b1=(001000),b2=(001000)→差は0
b1=(001000),b2=(000100)→差は2
b1=(001000),b2=(000010)→差は4
b1=(001000),b2=(000001)→差は6
この場合も1ビットのシフトは2差に相当する.
1の数が異なる場合,「1」を規準にしてみると,
b1=(001000),b2=(110000)→差は3
b1=(001000),b2=(011000)→差は1
b1=(001000),b2=(001100)→差は1
b1=(001000),b2=(000110)→差は3
b1=(001000),b2=(000011)→差は5
「11」を規準にしてみると,
b1=(001100),b2=(100000)→差は5
b1=(001100),b2=(010000)→差は3
b1=(001100),b2=(001000)→差は1
b1=(001100),b2=(000100)→差は1
b1=(001100),b2=(000010)→差は3
b1=(001100),b2=(000001)→差は5
[4]求める間マンハッタン距離は[1]+[2]+[3]
w1=(010110)とw2=(101001)の距離は3
となる.
===================================