二次著作のアンチ・テーゼ
一次著作を数学の書籍としてその内容をプログラミングすること。これは二次著作だろうか。的はずれのようだけど案外あっていると思う。
数学を理解せずにプログラムできるのか。
プログラムはつくれるだろう。しかし、検証はできない。数式を理解していないのでプログラムの実行結果は眺めるもの。観賞するものになる。数学をプログラムしたものでなく、自分が書いたプログラムを美術品のように感じる人もいる。
数学とコンピュータについて割と本気で考えたことがある。そうはあっても、やろうとしたことは BASIC 言語で数値計算プロセッサもないパソコンで自分で少しはプログラムをしたことがある。
アルゴリズムという表現は一般名詞になっているから、原(原本)アルゴリズムと書く。
それにアルゴリズム、ロジック、プログラミングの言い方を分けても意味がないようだ。
過去にアルゴリズムそう言っていたもの原アルゴリズムとするものは何かと言うと数値計算・データ構造の2つ。
以前はコンピュータグラフィックはできないに等しいことだったので含めない。
アルゴリズムと数学は、それぞれ専門に解説した記事があるの別途、参照してください。
どんなものがあるかというとざっと分けてみる。
数値計算 数学の公式でプログラムがあるもの(一部)。
二項係数 | 代数方程式 | ガウスの消去法 |
素因数分解 | 高次方程式 | クラウト法連立一次方程式の解 |
2次方程式 | 常微分方程式 | 掃き出し法による行列・逆行列 |
π(シンプソン) | 数値積分(台形法) | lu分解 |
行列 | コレンスキー分解 | ldu分解 |
素数 | テイラー級数・べき級数 | モンテカルロ法 |
階乗・総和 | 最大公約数 | 多項式 |
フィボナッチなど |
原アルゴリズム 数学を基にコンピュータサイエンスになったもの。プログラムがあるもの(一部)。
ソート・マージ | データ構造 |
ヒープソート | 配列 |
クィックソート | リスト(キュー)、スタック |
単語分け | ポーランド記法/逆ポーランド記法 |
逐次検索 | 木構造(ツリー構造) |
二分検索など |
論理プログラム コンピュータサイエンスを基にしているもの。プログラムがあるもの(一部)。
集合理論 グラフ ハノイの塔など
数学の公式はあっても実装するプログラムはだいたい同じになる。少しずつ違うものになるが何故なのか。
その制約で何かしようとしてもできることは限られる。プログラム自体はできることが決まっている。
たとえば、ニュートン法をプログラムにしようとしても他の人のプログラムを見なくて記述してもだいたい同じになる。
この場合、違うことをするのはおかしいことになる。
性能・速度を出すために変数を全部、整数型にするとか、誤差が嫌だから同じように全部、整数型にするとか、
逆に精度をあげるために全部、倍精度にするとか、こういうことをするとニュートン法からむしろかけ離れてくる。
プログラムに無理が生じるからだ。
素直にニュートン法の通りにプログラムすれば、その結果プログラムは似たり寄ったりになる。
(倍精度については、むしろ誤差が大きくなる。)
数値計算は数学書籍シリーズ等そちらが詳しいだろう。
コンピュータ・サイエンスは数学と重なる。そもそもコンピュータは電子計算機だ。
単純に計算する機械といってよい。そして純粋アルゴリズムは、データ構造と言ったほうがいいかもしれない。
コンピュータ・サイエンスの本をいくつか見返すとコンピュータの実行は結果として同じことをするといっても
手段と方法の説明に工夫がある。それでもコンピュータはできることは決まっているから似たようなプログラムになる。
二次著作で少し思ったことは数学とプログラミングとは違うことだけどパクリはくせになって自分の頭で考えることができなくなる。
プログラミングでは他人がつくったプログラムをそのまま打ち込んで実行しても頭に入らない。
数学なんかはとくに唸りながらでも頭を使うもので苦労して覚えたことは忘れないものだ。
2024/04/29