公開: 2019年7月13日
更新: 2024年9月26日
コンピュータは、四則演算を超高速で行うことができます。さらに、簡単な四則演算でなくても、人間が行う簡単な判断を伴う仕事であれば、コンピュータは実行することはできます。その時に必要なものが、プログラムです。ブログラムは、計算途中での計算計算結果などを参考にして、計算処理をどのように進めれば良いのかの指示に従って、答えを出すことができます。そのようなプログラムを総称して、ソフトウェアと呼びます。コンピュータが人間の役に立つのは、コンピュータとソフトウェアの両方があるからです。
コンピュータが人間社会に影響を与えるほどに普及し始めると、コンピュータを作るための技術を研究する専門家だけでなく、コンピュータを動かすために必要なプログラムをより簡単に、誤りなく作成するための道具や方法を研究する専門家も出現しました。人間が手で計算をしている昔から、どのようにしたら計算を速く、簡単にできるのかは、数学者の興味の対象でもあったからです。それは、他の分野の技術者が、何か新しい物を作ろうとする時、さまざまな問題に直面して、それらの問題を解こうとすると、しばしば必要になることだからです。簡単な例としては、ある数の平方根を計算するなどです。その意味は、ある数xが与えられ、その数同士を掛けたx×xの答えが数aだとするとき、逆にaが与えられて、元の数xを求める問題です。理論的には、その答えは√aとなります。しかし、そのaの値を求めるのは、それほど簡単ではありません。そのaを求める計算の仕方を決めるのが、ソフトウェアです。
中学生以上で、方程式を勉強した生徒さんであれば、その答えはx×x - a=0の方程式を満足する解であることは分かるかもしれません。与えられる数aの値が、1、4、9などの数であれば、1、2、3が答えになります。しかし、与えられた数が2の場合はどうなるでしょう。この問題は、古代バビロニアの数学者達を悩ませた問題の一つです。古代バビロニアの人々は、どのような数も、1以下の数は、分数で表すことができると思っていました。ですから、その答えを分数で表そうとしたわけです。しかし、現代の我々は、その答えは分数では表すことのできない数である場合があることを知っています。それでも、物を作ることを仕事としている古代の技術者は、問題が生じない範囲で、できるだけ正確な値を求めなければなりません。そのような理由から、アラビアの数学者たちは、巧みな計算方法を研究していました。イギリスの物理学者、ニュートンもそのような計算の仕方を研究した一人でした。
コンピュータが出現して、長い計算を速く実行することができるようになり、本当にそのような問題の答えを探すことができるようになりました。ですから、研究者たちは、ある問題が与えられた時、どのようにすれば、ある程度の時間で問題の答えを見つけ出すことができるのかを考え始めました。そして、その答えを見つけるのに必要な時間の長さによって、問題を分類するようになりました。つまり、与えられた数が、b桁の2進数で表されるとき、何回の計算で答えにたどり着けるかを考え、その答えにたどり着けるまでの計算回数の多さで、計算方法の良さを決めようと言う考え方です。これを「計算の複雑さ」と言います。
数学的な問題で、数字が具体的に与えられる問題の多くは、このようなやり方で計算方法の良さを測り、より良い計算方法を見つけ出すことができました。ところが、現実の世界で直面する問題を解こうとすると、計算方法を明確に決められない問題にしばしば直面します。問題がどのようなものかを数式で表現できても、その答えを求める方法が見つからない場合が少なくありません。つまり、答えになる可能性のある「答えの候補」を片端から全て試して、「総当たり」でやってみないと、本当の答えが見つからない問題などです。そのような問題でも、現実にそのような問題があり、それを解くことを仕事としている人々がいます。そのような人々の中にも、コンピュータと言う道具を利用して、問題を解くことをできるようにしようと考えた人々がいました。答えかも知れない値を片端から全て試してみるのです。例えば、暗号化された文章を、暗号化のカギが分からないまま、元の文章に戻す問題などがそれに当たります。
そのような問題でも、コンピュータの計算は、人間が行う計算よりもはるかに速いので、実際に解ける場合は少なくありません。最近では、そのような問題を解かなければならない例が、急激に増加しています。それは、経済を良くする目的であることが、しばしばです。「絶対に正しい」とは言えない答えでも、現実に儲かればよいからです。