アルゴリズムの設計に関しては、多くの場合、次の手法を使用します。
- 動的プログラミング
- 貪欲戦略
- 分割統治
最初の2つの方法については、よく知られた理論的基礎、つまりベルマン最適性原理とマトロイド(またはグレドイド)理論がありますが、D&Cに基づくアルゴリズムのこのような一般的なフレームワークは見つかりませんでした。
まず、コンビネータのコンテキストで発生した「アルゴリズムスケルトン」と呼ばれる関数型プログラミングクラスで私たち(またはむしろ教授)が導入したことを認識しています。この例として、D&Cアルゴリズムのスケルトンを次のように指定しました。
定義:空でないセットとします。 ソリューションの要素と呼び、の要素:= P(A )(つまり、のサブセット)は問題と呼ばれます。次いで、D&C-骨格は 4タプルであるここで、:
- 問題の集合以上の述語であり、我々は問題のことを言うされ、基本的なIFF成り立ちます。
- 、Aマッピングである P β → Sの各基本的な問題に対する解決策を割り当てます。
- は、各問題を一連の副問題に分割するマッピング P → P(P )です。
- は P × P(S )→ Sのマッピングであり、サブ問題の解(「ピボット問題」の種類に応じて)を結合して解を生成します。
次いで、に対して与えられたスケルトンおよび問題Pは、次の汎用関数F S:P → Sは、のために(形式的な意味での)解を計算P。
ここで、我々は、表記の使用2行目のサブセットのためのXマッピングの終域のF。
ただし、この方法で定式化できる問題の根底にある「構造」特性については詳しく調べませんでした(先ほど言ったように、これは関数型プログラミングクラスであり、これはほんの一例です)。残念ながら、私はこのアプローチについてのさらなる参照を見つけることができませんでした。したがって、上記の定義は非常に標準的なものではないと思います。誰かが私が上で述べたことを認識したら、関連記事について喜んでいるでしょう。
第二に、欲張り戦略については、その解が重み付きマトロイドを構成する場合にのみ、一般的な欲張りアルゴリズムによって問題が正しく解決されるという有名な結果が得られます。D&Cアルゴリズムについても同様の結果がありますか?