プロローグ
どうも、安田です。
今回は、プログラミングをする際に、非常に実用的な概念を見つけたので、それをするための数学の理論についてここに残しておこうと思います。
今回扱うのは、可変進数という名前を付けましたが、桁ごとに何進数かが変わるという数についてです。この理論はプログラミングにおいて、次元が定まらない配列を作成する場合に役立ちます。(これについては後ほど書きます)
本論
可変進数の定義
可変進数をどの文字でおくかなどの事を毎回書くのは非効率なので、最初に以下のように定義しておきます。
プログラミングにおいて、$n$ が不定な場合、$n$次元配列を定義しようと思ってもできるような言語は少ないと思います。
この可変進数は、$n$ が不定であり $n$ 次元配列を定義できないという場合に、1次元配列として一般化するという手法に用いる事が出来ます。
可変進数の実値計算
プログラムで言えば、n次元配列から1次元配列へと変更した時のインデックスの決定方法にあたるのが、このセクションです。
ここでは、$X$の実際の値を数式でどのように書くかを考えます。これは、その桁より下の桁で、何通りの整数を表せるか
を数える事により解決します。これは、その桁で1つ値が大きくなることにより、その桁より下の桁で表せる場合の数の分だけ$X$の値が増加するからです。
実際のプログラムで書く場合は、これが一般化された1次元配列でのインデックスとなり、$n$でforループを用いる事によりインデックスを計算でき、不定な$n$に対してもプログラムとしてコーディングする事が可能です。
可変進数への変換
やはり多次元配列を用いようとするプログラムという事は、何かしらインデックスを区別すべき部分があるという事です。そこで、可変進数において何桁目がどの数字かという事も求める必要がありますので、その解決方法にあたるのがこのセクションです。
$p_k = \mathrm{Const.}$ の場合では普段あまりという概念を使いますが、一般化された可変進数ではあまりの言い換え(一般化)を用います。
まず、10進数の場合の余りの一般公式で例をあげますと、以下ような計算です。
上の式は例えば 14392 という10進数の数があった場合、 3桁目であれば $143 - 140 = 3$ によって求めるという事です。 このように余りを一般化し、可変進数にもこれを適応します。
これにより、任意の桁の値を求める事ができます。なお、ガウス記号は単純に型キャストにより解決可能です。
使い道
次元が定まらない配列を使う事があるのか、という事ですが、場合分けの情報処理などをする場合に必要となります。
例えば、ユーザーの入力した深度に合わせたコラッツ数列の樹形図を作ろうと思った場合、インデックスが1つのものと2つのものがユーザーの決めた値の分だけ生成される必要があります。
その他に、再帰関数の回避にも使う事が出来ます。再帰関数であまりにも大量の再帰呼び出しをするとスタックオーバーフローのエラーが出てしまうので、その場合などにも使えます。
このように、今回は非常に実用的な理論を立てる事ができました。それでは、お疲れさまでした。

コメント送信フォームまで飛ぶ
この記事には0件のコメントがあります。