数学において、組み合わせ爆発とは、入力、制約、境界に対する組み合わせの依存性によって問題の複雑さが急速に増大することを指します。組み合わせ爆発は、特定の問題の扱いの難しさを正当化するために用いられることがあります。 [ 1 ] [ 2 ]このような問題の例としては、特定の数学関数、いくつかのパズルやゲームの分析、アッカーマン関数としてモデル化できるいくつかの病理的な例などが挙げられます。
n次のラテン方陣とは、 n個の要素からなる集合から要素を抽出したn × nの配列であり、その集合の各要素が配列の各行と各列にちょうど1回ずつ出現するという性質を持つ。3次のラテン方陣の例は次のとおりである。
ラテン方陣の一般的な例としては、完成した数独パズルが挙げられます。[ 3 ]ラテン方陣は、エントリの配置のみが重要であり、エントリ自体が何であるかは重要ではないため、組み合わせオブジェクトです(代数オブジェクトとは対照的です)。順序の関数としてのラテン方陣の数(エントリが抽出される集合とは無関係)(OEISのシーケンスA002860)は、次の表に示すように、組み合わせ爆発の例を提供します。
組み合わせ爆発は、数独などのグリッド上でプレイされるパズルでも発生する可能性があります。[ 2 ]数独は、各要素がサイズ√n × √nのサブセクション(ボックスと呼ばれる)にちょうど1回出現するという追加特性を持つラテン方陣の一種です。組み合わせ爆発はnの増加に伴って発生し、次の表に示すように、構築、分析、解決できる数独の特性に制限が生じます。
組み合わせの複雑さが解決可能性の限界につながるゲームの一例として、チェス(64マスと32個の駒を持つゲーム)の解決が挙げられます。チェスは解決済みのゲームではありません。2005年に、6個以下の駒で終了するすべてのチェスのゲームが解決され、各局面を完璧にプレイした場合の結果が示されました。さらに10年かけて、チェスの駒を1つ追加してテーブルベースを完成させ、7個の駒のテーブルベースを完成させました。チェスのゲーム終了に駒を1つ追加する(つまり8個の駒のテーブルベースを作る)ことは、組み合わせの複雑さが増すため、解決不可能と考えられています。[ 6 ] [ 7 ]
さらに、チェスのような大規模なゲームを解く見込みは、チェスの大きな変種や無限チェスのように、盤面のサイズが大きくなるにつれて難しくなる。[ 8 ]
組み合わせ爆発は、通信や多次元空間と同様に、コンピューティング環境でも発生する可能性があります。Aというブール値を持つ変数が 1 つだけの単純なシステムを想像してみてください。このシステムには、A = true またはA = false の 2 つの状態があります。別のブール変数Bを追加すると、 A = true かつB = true、A = true かつB = false、A = false かつB = true、A = false かつB = falseの 4 つの状態が考えられます。n個のブール値を持つシステムには2 n 個の可能な状態がありますが、 n個の変数それぞれにZ 個の許容値 (ブール値の 2 (true と false) だけではなく) を持つシステムにはZ n個の可能な状態があります。
可能な状態は、高さnの木の葉ノードと考えることができ、各ノードはZ 個の子ノードを持ちます。葉ノードが急速に増加するこの性質は、検索などの分野では、あまり深く辿らなくても多くの結果にアクセスできるという利点があります。しかし、このような構造を操作する際には、かえって障害となる場合もあります。
オブジェクト指向言語におけるクラス階層は、異なる種類のオブジェクトが親クラスから継承するツリー構造として考えることができます。異なるクラスを組み合わせる必要がある場合(例えば、A < Bのような比較式)、組み合わせの数は爆発的に増加します。各比較式を個別にプログラミングする必要がある場合、クラスの数が少なくてもすぐに扱いが困難になります。多重継承は、サブクラスが複数の親クラスを持つことを可能にすることでこの問題を解決します。これにより、既存の階層構造を損なうことなく、すべての子クラスではなく少数の親クラスのみを考慮すればよくなります。
例えば、異なる野菜が祖先種から遺伝的特性を受け継ぐ分類体系を考えてみましょう。この階層構造には遺伝情報しか含まれておらず、美味しさについては何も触れられていないため、各野菜の美味しさを他の野菜と比較しようとすると困難になります。しかし、ニンジン/ニンジン、ニンジン/ジャガイモ、ニンジン/芽キャベツ、ジャガイモ/ジャガイモ、ジャガイモ/芽キャベツ、芽キャベツ/芽キャベツといった比較を記述する代わりに、現在の祖先に基づく階層構造を維持したまま、それぞれが「美味しい」という別のクラスから多重に遺伝するようにすれば、上記のすべてを「美味しい/美味しい」という比較だけで実現できます。
管理やコンピューティングの分野において、組み合わせ爆発とは、プロセスに組織が追加されるにつれて通信回線が急速に増加する現象を指します。(この増加はしばしば「指数関数的」と表現されますが、実際には多項式的な増加です。)
2つの組織が特定のトピックについて連絡を取り合う必要がある場合、直接的かつ臨機応変な方法でコミュニケーションを取るのが最も簡単な場合があり、必要なコミュニケーションチャネルは1つだけです。しかし、3つ目の組織が加わると、3つのチャネルが必要になります。4つ目の組織が加わると6つのチャネルが必要になり、5つ、10つ、6つ、15つと増えていきます。
一般的に、 n個の組織 の通信回線数。これはn個の要素の2 通りの組み合わせの数に等しい(二項係数も参照)。[ 9 ]
もう一つのアプローチは、このコミュニケーションが単発的な要件ではないことを認識し、汎用的または中間的な情報伝達方法を開発することです。欠点は、それぞれが内部的な方法を共通の方法に変換する必要があるため、最初のペアにとってより多くの作業が必要になることです。これは、表面上は相手を理解するだけの簡単なアプローチとは異なります。