チューリングマシンにおける2倍、1/2の効率性
チューリングマシンは3倍や1.5倍を考えるのが苦手で、基本的に最小ステップで増やすということであれば、2倍がスムーズである。処理の効率や仕組みのシンプルさという点において、チューリングマシンは圧倒的に2倍(2進数)が得意で、3倍や1.5倍は遠回りした計算である。
1. チューリングマシンにとって「2倍」は一瞬
チューリングマシンは、マス目が並んだ「テープ」と、それを読み書きする「ヘッド」だけで動く最もシンプルな計算モデルです。もし、このマシンが「2進数(0と1)」で数字を記録している場合、「2倍にする」という処理は、すべての数字を左に1マスずらして、末尾に「0」を書き足すだけで完了します。
- 「5」を2倍にする場合:
- 2進数の「5」は
101です。 - これを左に1マスずらして末尾に0をつけると
1010になります。 1010は10進数で「10」です。
- 2進数の「5」は
テープの上の記号を左右にズラすだけ(これをシフト演算と言います)なので、チューリングマシンのヘッドは複雑な計算を一切することなく、一瞬で「2倍」を完了できます。
2. なぜ「3倍」や「1.5倍」は苦手なのか?
一方で、3倍や1.5倍にしようとすると、チューリングマシンはステップを踏むことになります。
① 「3倍」にする場合
2進数の世界には「3」というベースがないため、一発で3倍にする魔法のシフト操作がありません。そのため、チューリングマシンは内部で以下のような「足し算の組み合わせ」に分解して計算します。
$$\text{元の数} \times 3 = (\text{元の数} \times 2) + \text{元の数}$$
- まず、シフト操作で「2倍」を作る(
101→1010) - その結果に、もう一度「元の数(
101)」を筆算のように1桁ずつ足していく
このように、「2倍するステップ」と「足し算するステップ」を組み合わせる必要があるため、2倍に比べて明らかに手数(ステップ数)が増えて苦手(面倒)になります。
② 「1.5倍」にする場合(さらに苦手)
1.5倍はさらに厄介です。なぜなら「小数の概念(あるいは割り算)」が入ってくるからです。
$$\text{元の数} \times 1.5 = \text{元の数} + (\text{元の数} \div 2)$$
- まず、右に1マスずらすことで「2分の1(半分)」を作る(
101$\rightarrow$10.1) - それを元の数と足し合わせる
このとき、もし元の数が奇数(5など)だと、半分にしたときに「2.5」という端数(小数点)が出てきます。チューリングマシンのテープ上で「どこが小数点か」を管理し、桁を揃えて足し算するのは、マシンにとって非常に複雑でステップ数の多い、大嫌いな作業になります。
3. なぜ「2」の呪縛から逃れられないのか?
チューリングマシン(および現代のコンピュータ)がここまで「2倍」に特化しているのは、世界を「0か1か」「反転するか、そのままか」という2状態(バイナリ)で定義しているからです。
もし「3倍」を2倍と同じくらい得意にしようと思ったら、テープに書く文字を「0, 1, 2」の3進数(トリナリ)システムに変えなければなりません。理論上、3進数のチューリングマシン(3進数コンピュータ)を作ることは可能ですし、過去に研究もされましたが、以下の理由で「2」が効率的でした。
- 物理的な作りやすさ: 電気が「流れている(1)」か「流れていない(0)」かの2段階が一番ハッキリしていてエラーが起きない。(「中くらいに流れている(2)」を作ると、ノイズで狂いやすい)
- 論理のシンプルさ: 「YESかNOか」の組み合わせが、最も無駄のないパッケージングになる。
物質や人間もチューリングマシンモデルだとすると、人間は2倍は考えられるが、1.1倍のような上場企業の中期経営計画は基本的に考えることができていないと思って良いだろう。
2倍はとてもシンプル、1/2は想像しやすく、逆に10倍や100倍もイメージしづらいのである。
2,4,8,16,32,64という2nは末尾に0を付け足していくだけなので、実は計算効率性が高い。
TANAAKKの純資産も100万円から始めて11年連続2倍を繰り返し2048倍になっているという点から考えると、どんなに数字が大きくなろうとも、2倍になるまでの期間を基準に考えることで、脳はシンプルなタスクをこなすということが言えそうである。
例えば、2倍になるのに5年かかりそうであれば、5年を1/2に圧縮し、2年半でできる方法を考える。質量は保存されるはずなので、決断が2倍になるはずである。2年くらいでいけそうと見えてくればそれを1年でできる方法に1/2する。そしてさらに半年でできそうなことを3ヶ月で終わらせる。
このように2倍(2進数の0を末尾に足すと2倍、2進数の1を末尾に足すと2倍+1)、1/2(2進数の0を末尾から外すと2分の1、2進数の1を末尾から外すと半分で小数点以下切り捨て)というエレガントな操作が可能である。

