コラッツ正則木生成ツールをアップデート

コラッツ正則木生成ツールをアップデートした.まだリリースしていないが,このEXEを実行するためには.NET 5.0が必要になる.それだけでなく同時に生成されているDLLも必要なので,ZIPパッケージを作って配布することにした.以下のような修正を行った.

  1. ULongの代わりにBigIntegerというデータ型を導入した.BigIntegerは制限なしで大きな数を扱うことができる.(もちろん,メモリが許す限りではあるが…)
  2. これによって,レンジオーバーが発生する可能性がゼロになったので,Range Overflowというフィールドを廃止した
  3. A面のMax odd number(Max numberとリネーム)とB面のOdd numberの表示桁数を倍増し,画面レイアウトを少し変更した
  4. B面のRoot numberを廃止した Get the numberを実行するときの開始番号はつねに1固定となる また,B面のMax degreeを読み取り専用とし,ユーザ入力できないようにした この値はつねに計算結果によって自動更新される
  5. A面にVoid node countというフィールドを追加した この値はコラッツ木上で葉となっている3の倍数ノード以下の(使われなかった)部分木領域のノード数に当たる 以下の式が成立している必要がある
    Max node count = Void node count + Valid node count
  6. A面Cancelボタンの仕様変更:実行ボタンが「Go」のときは,「Quit」を表示するようにした
  7. ノード数列を格納する配列サイズをを決定するための「充填率」を以下の式で予測するようにした 指定枝数をD,樹高をHとするとき,有効ノード数(予測値)=枝数(D * 2/3+1)高さHの正則木のノード数+ 枝数(D/3)高さHの正則木のノード数 ただし,ここでは枝数D,樹高Hの正則木のノード数=(D^(H+1)-1) / (D-1)のようにやや小さめに計算している (本来の完全正則木のノード数MはM=D^(H+1)/(D-1)で与えられる)
  8. その他バグフィックス

項目7の修正は安全側にシフトしたパラメータを使っているつもりだが,不足するケースが発生する可能性もある.有効ノード数(予測値)をDとHから厳密に求めることは理論的には可能と思われるが,いまのところはそのような計算式(アルゴリズム)を導入する予定はない(誰かわかる人がいたら教えてください).現在適用している式がどの程度妥当なものか知りたいのだが,実行時に配列サイズが不足したときには,むしろリサイズしてしまう方が現実的かもしれない.とりあえずは,現状でリリースしてユーザからのレポートを待つことにしたい.

▲B面のGet the sequenceでOdd numberに偶数を記入してボタンを押しても無反応 ⇒「xxxを超えないような奇数を入力してください」のようなメッセージを出していたが,制限がなくなったためコメントで止めていた.

▲B面のGet the numberで取得した値でOdd numberの表示を更新した方がよい ⇒対処した.動作がだいぶ分かりやすくなってきた.

▲Get the numberに入れた修正をTruncated treeにも入れる必要がある ①ボタンが押されたとき,入力された枝番号リスト文字列を整形して再表示,②最終結果の奇数をOdd numberに表示する

コメントを残す

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

CAPTCHA