Collatz問題 #20

collatz11.gの結果からこのグラフが自己相似的であるような感じがする。
ノード8まで操作回数10回以内で到達しうるノードで構成されたこのレベルでは、
ノード16で合流する左右二つの経路群は合同であるように思える。
しかし、これを例えば操作回数15回以内のレベルまで見てみるとそれが誤りであることが分かる。

collatz12.g
BEGIN {
  if (ARGC != 1 || ARGV[0] == "-?") {
    print("usage: gvpr -fcollatz12.g -a <maxlevel> /dev/null");
    exit(0);
  }
  int maxlevel = ARGV[0];
}

...snip
  for (level = 0; level < maxlevel; level++) {
...snip

引数で最大レベルを与えるようにgvprプログラムを変更して、

$ gvpr -fcollatz12.g -a15 /dev/null | dot -Tpng -ocollatz12.png

のグラフを見ると、もはや左右の経路群が合同ではないことが明らかになる。
このグラフはサイズが大きいのでここでは示さないが、
代わりにcollatz11.gの結果のグラフでも説明できる。
合同ではなく、ノード8を終了ノードとしノード16で合流する右の経路群と、
ノード5を終了ノードとしノード10から先へと遡る経路群が相似となっているように思える。
ノード16で合流する左右の経路群をさらに遡った上流には同様な相似的グラフが感じられる。

他に経路で特徴的なものとしては、
値が3の倍数のノードへ至る経路はその上流では合流ノードの無い一本道となることである。
また3の倍数でない奇数ノード、すなわち合流ノードへ赤エッジで到達するノードは、
そこから1回か2回遡れば再び合流ノードとなり、
それより青エッジ側の上流、すなわち半分にする操作を遡っていく経路では、
非合流ノードと合流ノードが交互に出現するようになる。
2のべき乗のノードが連なっている経路でも同様に一つ飛ばしに合流ノードが現れている。