任意の奇数を指定してコラッツ正則木上の位置を決定するプログラム

表題のプログラムを示せば,我々の解法が正しいことは誰にでも容易に理解できる(必ずしも証明に代わるものではないが).類似のプログラムはネット上にあるが,それらは任意の奇数(ないし自然数)を指定して,その数から1に至るコラッツ数列を表示するというものに過ぎない.これらは個別の数について,コラッツ予測が成立していることを示すものではあるが,コラッツ木を一般的に生成するものではない(コラッツ正則木上の位置は決定できない).表題プログラムはこれらとは一線を画すものであり,コラッツ木を葉から根へと探索するのではなく,その数のコラッツ木上の位置を直接決定しようとするものである.

どうも,外部接続用のVAIOの状態がおもわしくないので,万一に備えて予備を整備しておくことにする.画面というより,一部画像が真っ赤になってしまうという現象はしばらく現れていないが,USBが不安定ですぐに切れてしまう.無線マウスはまったく使えない.WiFiの接続も途切れることが多い.このノートはtamo2氏から贈呈されたものだが,そろそろ寿命なのではないかと思う.控えのマシンはしばらく使っていなかった 2 in 1 のサブノートだ.これまでに少なくとも3回基盤交換していることもあり,しばらく任務を解かれていたのだが,復帰してもらうしかない.OSをクリーンインストールした状態になっているので,環境整備を一からやらなくてはならない.

手順は例によって以下の通りだ.①デバイス名を変更する,②Chromeをインストールし,Googleにログインする,③カスペルスキーをインストールして,完全スキャンを実行する,④ThunderBirdを導入する,⑤Open Live Writerを導入する, ⓺MouseWithoutBordersを導入する.これだけ済めば後は,必要に応じてということでよいだろう.というか,このノートは実装RAM 4GB,HD 278GB しかないので,できるだけ余分なものは搭載しないようにしないと走らない.③の時点でディスクの空き容量はすでに12GBしかない.

ThunderBirdのデータ移行はまだやっていないが、一応使える状態にはなった。あ、もう一つある。Google日本語入力だ。これで一通り平常作業ができるようになったのではないだろうか?VAIOはまだ生きているが,マウスを使わずにタッチパッドで操作可能かどうか?見ておこう.タッチパッドが作動していると誤動作が発生することが多いので,現在はテープを貼って隠してある.⇒やはり,すべてをタッチパッドでやるというのはかなり難しい.特にThunderBirdなどでドラッグ&ドロップなどをやるととんでもない失敗を冒す可能性がある.使うならマウス使用,使わないのなら廃棄と決め付けた方がよい.

新しい環境にも一つ難点がある.Open Live Writerの編集画面のレイアウトがおかしい.タイトルの上に不用な空白があり,その上,編集画面を一定の幅以上に広げることができない.それ以上に拡げると逆にその半幅に縮まってしまう.Open Live Writerは本家サイトからダウンロードしたものだ.USBが認識されずにカーソルが固まってしまうのよりはマシかも知れないが…

どうも,控えの方も怪しくなってきた.液晶のガラス面左下隅に割れ目があり,そこをさすっていたら突然落ちてしまった.その後,再起動しても立ち上がらない.外付けHDを外したら起動できた.HDがダメージを受けているとすれば痛手だ.繋ぎ直してみたが,特に問題はなさそうだ.ガラス面の傷は多分触りさえしなければ,なんとかなるとは思うが…気になるので,ついつい触ってしまいそうだ…VAIOのバックアップを取ってみたが,46GBもある.Cドライブには12GBしか空き容量はないので,当然間に合わない.VAIOには256GBのSDカードを装着しているので,それを持ってくるしかないのだが…今日のところはここまでということにして,もう少し(潰れるまで)VAIOを使ってみることにする.

無線マウスも使える状態になっている.タッチパッドは感度を下げてもご動作する.本来デバイス設定でオン・オフできるはずなのだが,ボタンが表示されていないし,アンインストールしても再起動すると戻ってしまう.やはり,上にテープを貼っておくしかないようだ.表題のプログラムに戻ることにしよう.奇数Nが与えられたとき,系図木上の位置を決定するためには,この数字を解析しなくてはならない.通常のコラッツ数列を生成するやり方を使えば,少なくとも木の高さを求めることはできる.しかし,これではカンニングしたみたいでおもしろくない.やはり,正則系図木を生成する手続きの逆手順として実施されなくてはならないと思う.どういう手順になるか?

  1. 任意の奇数をNとする
  2. (N – 1) / 4 の操作を右端のノードに出るまで反復する この回数Tを記録する
  3. 同一枝の右端ノードをRとする
  4. Rに対応する偶数 M = 3R + 1 を求める
  5. M / 2 の操作を,反復し,上位奇数N’ を求める
  6. これを N = 1 となるまで反復する この回数Hを記録する

当初設計では,出力の「位置」は.(d, h, b, l) のように出力されることになっていた.

  • d はノードの(最大)次数,つまり,d-正則木を構成する
  • h は木の高さを示す
  • b はNの一つ上の階のノードに接続する枝数合計
  • l はNの親ノードに接続する同位ノードの個数

しかし,この設計はあまりよくないと思う.というのは,bの値は通常相当大きなものになってしまうからだ.実際,この値はd^(h-1)のオーダーになる.むしろ,ポジションを数列のような形式で表した方が実用的であるように思う.つまり,上記手順でT(1), T(2), …. T(h)を逆順に出力し,

{ (T(h), T(h-1)), …., T(2), T(1) }

のようなことを意味する.これは言ってみれば,市街のある地点に地番を振るようなやり方に似ている.郵便番号方式,あるいは,IPアドレスの振り方などにも似ている.たとえば, 67という数の場合のTは{1, 2, 1, 2, 1, 1, 2, 1}のようになるから,アドレスはこれを逆順にたどって,

1.2.1.1.2.1.2.1

のように表記されることになるだろう.この数列を見れば,その奇数が正則木上のどの位置に配置されるかは,木の全体図を見なくても決定することができる.木の高さというのはこの数列の長さであり,l は T(1) に他ならない.b の値をこの数列から推計することができるだろうか?当然できなくてはならないが,ちょっとややこしい計算が必要になりそうなので,ここではパスして先に進むことにしよう.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA