ブログ

[数理]第3回組合せ問題

2006年10月30日(月)18:30|谷口

谷口です。

前回はオーダーという計算量の概念について書きました。 今回は問題のクラスという概念を紹介します。 この問題のクラスというのは解くための計算量によって分類されます。また、計算量が大きい問題ほど難しいと捉える慣わしになっています。

キーワード

  • 多項式オーダー
  • 指数オーダー
  • P=NP?

おさらい

  • 多項式オーダー:実行に要する時間が、入力に対して多項式的に増加する
  • 指数オーダー:実行に要する時間が、入力に対して指数的に増加する

多項式とは、独立した変数の四則演算(+-×÷)で表わされた式のことです。

例えば、次のようなデータベースがあるとします。

table1 table2
column1 column2 column1 column2
record1 りんご 100 お茶 500
record2 みかん 50 コーヒー 250
record3 ばなな 100 ジュース 350

ここで、select * from table1 という要求をした場合、返ってくるレコードは3つです。

column1 column2
りんご 100
みかん 50
ばなな 100

1レコードを取得する時間が固定であるとすると、これはレコード数に比例した時間がかかることになります。(O(n))

次に、select * from table1, table2 という要求をした場合、返ってくるレコードは9つです。

table1.column1 table1.column2 table2.column1 table2.column2
りんご 100 お茶 500
みかん 50 お茶 500
ばなな 100 お茶 500
りんご 100 コーヒー 250
みかん 50 コーヒー 250
ばなな 100 コーヒー 250
りんご 100 ジュース 350
みかん 50 ジュース 350
ばなな 100 ジュース 350

これは、32。つまり、レコード数テーブル数となります。*1同様に1レコードを取得する時間が固定であるとすると、

仮に、結合に要するテーブル数が一定で、レコード数が可変だとすると、レコード数の多項式オーダーとなります。 仮に、レコード数が一定で、結合に要するテーブル数が可変だとすると、テーブル数の指数オーダーとなります。

※ここで挙げたのは、あくまで例です。実際にDBを運用する場合は、結合するテーブル数が可変になるようには設計しないでしょう。

*1:正確にはtable1のレコード数×table2のレコード数となりますが、説明のためこのような表現をしました。

問題のクラス

 厳密には、決定性チューリングマシンやら非決定性チューリングマシンやら小難しいもので定義されますが、 ここでは、おおざっぱに書きます。

  •  P :多項式時間で解が求められる決定問題のクラス
  •  NP :解の検証は多項式時間でできるが、解を求めるのはその限りではない問題群。代表的な問題:ハミルトン閉路問題など SATの場合ですと、 ある変数の値の組が渡されたとき、 ・式の数だけ成立可否を判定する。 成立可否の判定は式に含まれる変数の数だけ検証すればよいので、O(m×n)となる。 一方、解を求めるには、最悪すべての変数の組を検証しなければならないので、 O(m×2^n)となり、これは多項式オーダーとなりません。つまり、SATはNPに属します。

 このようなクラス分けをする意義は、対象としている問題がどのクラスに属するかということで、ある程度解決方法が分かることが挙げられます。また逆に、各クラスで属している問題であれば、ある程度は今後の課題も共通しますので、研究する上では何をどうすることで貢献できるかがわかるのも利点です。  (次回以降に説明予定の 完全問題多項式時間帰着が絡んできます。)

 また、この他にもPSPACE、NPSPACE、EXPTIMEといった問題のクラスがありますが、ここでは割愛させていただきます。

「P=NP?」命題

 この命題は上記の問題のクラスPとNPの関係に対する問いかけです。厳密にいうと少し違いますが、クラスNPとクラスPに属する問題を解くための計算量のオーダーが同じであるかどうか?といった感じでしょうか。

 少し踏み込むと、NPがPを含むのは自明(多項式時間で解が求められるので、NPの条件を満たすことが確実)なので、

   P ⊆ NP

 つまり、この命題は、

   P ⊇ NP

 が成り立つかどうかを問うているのと同義です。   もし、「P=NP」であれば、SATなどクラスNPに属する問題が多項式時間で解けるということになります。なお、この命題の真偽が証明できたら100万ドルもらえるそうです。

おわりに

 次回は完全問題と困難問題についてお話できたらと思います。

この記事に関するお問い合わせはこちら

ページの先頭へ