分割統治の理論的基礎
アルゴリズムの設計に関しては、多くの場合、次の手法を使用します。 動的プログラミング 貪欲戦略 分割統治 最初の2つの方法については、よく知られた理論的基礎、つまりベルマン最適性原理とマトロイド(またはグレドイド)理論がありますが、D&Cに基づくアルゴリズムのこのような一般的なフレームワークは見つかりませんでした。 まず、コンビネータのコンテキストで発生した「アルゴリズムスケルトン」と呼ばれる関数型プログラミングクラスで私たち(またはむしろ教授)が導入したことを認識しています。この例として、D&Cアルゴリズムのスケルトンを次のように指定しました。 定義:A,SA,SA,S空でないセットとします。SSS ソリューションの要素と呼び、の要素:= P(A )P:=P(A)P:=P(A)P:=\mathfrak{P}(A)(つまり、のサブセットAAA)は問題と呼ばれます。次いで、D&C-骨格は 4タプルである(Pβ,β,D,C)(Pβ,β,D,C)(P_\beta, \beta, \mathcal{D}, \mathcal{C})ここで、: PβPβP_\beta問題の集合以上の述語であり、我々は問題のことを言うpppされ、基本的なIFFPβ(p)Pβ(p)P_\beta(p)成り立ちます。 、Aマッピングである P β → Sの各基本的な問題に対する解決策を割り当てます。ββ\betaPβ→SPβ→SP_\beta \rightarrow S は、各問題を一連の副問題に分割するマッピング P → P(P )です。DD\mathcal{D}P→P(P)P→P(P)P \rightarrow \mathfrak{P}(P) は P × P(S )→ Sのマッピングであり、サブ問題の解(「ピボット問題」の種類に応じて)を結合して解を生成します。CC\mathcal{C}P×P(S)→SP×P(S)→SP\times \mathfrak{P}(S) \rightarrow S 次いで、に対して与えられたスケルトンおよび問題Pは、次の汎用関数F S:P → Sは、のために(形式的な意味での)解を計算P。s=(Pβ,β,D,C)s=(Pβ,β,D,C)s=(P_\beta, \beta, \mathcal{D}, \mathcal{C})pppfs:P→ Sfs:P→Sf_s: P\rightarrow Sppp fs(p )= …