■幾何学におけるマイ未解決問題(その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

となる.

===================================