i7_yoc's something

数学科…なのか?

P≠NP問題とはなにか?【Wathematica Advent Calendar 2021】

Wathematica Advent Calendarの12/7の記事です。

現代の数学はとても広範で深遠な発展を遂げています。しかしそれでも、いまだに証明・反証がなされていない「未解決問題」というものが数多くあります。

例えばかの有名なフェルマーの最終定理はつい25年前までは未解決問題でした。つまり、それまではフェルマーの最終定理が本当に成り立つのか、あるいは成り立たないような反例があるのか、誰もわからなかった。

ABC予想の解決もそうですね。京大の望月教授が解決したということで、去年か一昨年に大きな話題になったと思います。あの命題も望月教授の論文が受理されるまでは「未解決問題」であり、だから名前も「ABC"予想"」だったわけです。

この2つの例はすでに解決されてしまった例ですが、今回紹介するのはいまだに未解決であるうちの一つの問題、「P≠NP問題」です。

P≠NP問題とは?

P≠NP問題とは、簡単に言うとアルゴリズムの「計算量」に関する問題です。計算量と聞いてぱっと来ない人も多いと思うので、例を挙げておきましょう。

計算量について

<例>(足し算問題) 正の整数nに対して、1+2+\cdots+nを求めたい。この計算はどれくらいの計算量で行えるか?

(「1回の計算」とは、2つの数の加減乗除を行うことを指すものとする)

この問題文に書いてある計算を実行する方法はいろいろあります。一番単純な方法としては、

(Step 1) 1+2を計算する

(Step 2) 上で求めた数に3を足す

(Step 3) 上で求めた数に4を足す

…………

(Step n-1) 上で求めた数にnを足す

という方法がありますね。この場合の計算回数は (n-1)回 となります。

つまり、この問題は高々(n-1)回の計算を行えば解ける、ということです。このとき、この問題は計算量O(n-1)で解けるといいます。

 n \rightarrow \inftyとしたときはnn-1も発散速度は変わらないので、通常はO(n-1)ではなくO(n)と書くことが多いです。ちなみにO(n)は「おーだーえぬ」と読みます。

実はこの「足し算問題」は、ほかの解き方をすることもできます。数学Bあたりで習うと思いますが、

 1+2+\cdots+n=\frac{n(n+1)}{2}

という公式がありましたね。これを使うと、次のように計算ができます:

(Step 1)  n+1 を計算

(Step 2)  n \times (n+1) を計算

(Step 3) (1)で求めた数を2で割る

なんと、3回で計算が終わってしまいます!ここで大事なのは「どんなnに対しても」3回で計算が終わるということです。と、いうことでこの問題は計算量O(3)で解けます。3も1も発散速度が変わらない(発散しない)ので、通常は O(1)と書きます。

ちなみに、実際はどんなnに対しても計算時間が同じ、というわけではありません。人間にとってはもちろん、コンピューターにとっても、1+2+\cdots+100000000000000を計算する方が 1+2+3を計算するよりも(機械はほんの少しだけ)大変です。

その理由は「『1回の計算』とは、2つの数の加減乗除を行うことを指すものとする」というところにあります。でも実際は、例えば5桁の数同士を足し算するときはまず一の位同士を足して、次に十の位を足して、...、というように5回の計算をしていますよね。このように「桁数」を考慮していないので、一見奇妙な結果が生まれるわけです。でも大まかなイメージはつかめていただけたかと。

P問題

ここからはいろいろな「計算問題」を分類していきます。

あるkがあり、計算量 O(n^{k})で解けるような問題を「多項式時間で解ける」問題、または「P問題」といいます。例えば、さっきの足し算問題はP問題です。なぜかというと、方法1を使えばこの問題は O(n)=O(n^{1})で解けるからです。ちなみにPは英語でPolynomial(多項式)のことです。

もしある問題が計算量 O(n^{999})では解けなくても、計算量 O(n^{1000})で解けたらP問題になります。

多項式時間での計算は、(例えそれがO(n^{1000})であっても)「速い」計算とみなされます。では逆に「遅い」計算とは何か?例えば計算量が O(n!) O(2^{n})必要な計算です。 n=1,2,3,...といった小さい数では n! 2^{n} n^{1000}に比べて圧倒的に小さな数ですが、nが大きくなっていくと最終的には前者の方がずっと大きな数になってしまいます。(これは、 \frac{2^{n}}{n^{1000}} \rightarrow \infty \, (n \rightarrow \infty)であることからわかります。

NP問題

一方、「答えが正しいかを多項式時間で確認できる」問題を「NP問題」といいます。NP問題であるが、P問題であるかはわからないものの例を挙げてみましょう。わかりやすいように設定を変えて、Twitterを使って考えてみます。

<例>(クリーク発見問題) Twitter上のn個のアカウントが与えられる。 k \leq nとする。 このとき、与えられたアカウントの中で、次の条件を満たすk個のアカウントの集合を発見できるか?:

「そのk個のアカウントのうち、任意の2つはFF(相互フォロー)の関係にある」

  

この問題は、答えを見つけるのは難しいですが、もし答えが与えられたら確認作業は容易に( O(n^{2})で)できます。(理由は読者への演習問題としよう)

つまり、答えを高速に計算できるかはわからないのでP問題かの判断はまだできませんが、答えの検証は高速に行えるのでNP問題であるといえます。

ある問題がP問題なら、それは必ずNP問題にもなります。なぜなら、P問題で多項式時間で計算した答えは必ず正しいからです。なので、「まず多項式時間で答えを計算する」「次にそれが与えられたものと一致するかを調べる」ということを行えばいいわけです。

P≠NP問題

ではここで本題に入りましょう。P≠NP問題とはすなわち、

「NP問題ではあるけど、P問題ではないような計算問題はあるか?」

という問題です。言い換えると、

「答えを言われればすぐに納得できるけど、自分で答えを出すのにはとても時間がかかるような問題はあるか?」

ということです。ただし「とても時間がかかる」というのは直観と必ずしも合致しないので注意してください。

P≠NP問題の行く先

P≠NP問題の行く先として考えられる可能性は3つあります。それは、

・P=NP、つまりすべてのNP問題はP問題である

・P≠NP、つまりNP問題だがP問題ではないものがある。

・決定不能。すなわち、「そもそもP≠NP問題に対する証明・反証が存在しない」ことが証明できる。

というものです。

多くの数学者はP≠NPだろうと予測しています。P=NPなら、今までできないと思われていた多くのことができるようになり、様々な分野で大きなブレイクスルーが起きるかもしれません。

「証明・反証が存在しない」というのは少し理解が難しいかもしれません。ゲーデル不完全性定理を知っている人はピンとくるでしょう。

ミレニアム懸賞問題

数学の世界にはこのように、解決が難しい問題がたくさんあります。P≠NP問題はその中でもトップレベルに難しいもので、アメリカのクレイ研究所によって「ミレニアム懸賞問題」に指定されています。これを解くと、なんと100万ドルをもらえるそうです!解決する自信のある方、富豪になりたい方は是非どうぞ!

ちなみにミレニアム懸賞問題は7つありますが、そのうちの1つ(ポアンカレ予想)だけが解決されており、P≠NPを含む残りの6つは未解決だそうです。

おまけ

Wathematicaが100万ドルを獲得する日もそう遠くないのかも...??

f:id:i7_yoc:20211205214644p:plain

参考資料

[1] 数学セミナー2013年12月号「P≠NP予想最前線」日本評論社, 2013

[2] Michael A. Nielsen, Isaac L. Chuang, Quantum Computation and Quantum Information, Cambridge University Press, 2010

[3] "P vs NP problem" https://www.claymath.org/millennium-problems/p-vs-np-problem Clay Mathematics Institute, 2021/12/06閲覧