GeeksforGeeks
n個の元からなる宇宙Uが与えられたとき、Uの部分集合の集合はS={S1,S2…,Sm}と言い、すべての部分集合Siは関連するコストを持つ。 Uのすべての要素をカバーするSの最小コストサブコレクションを見つけます。
例:
なぜ便利ですか?
これはカープのNP完全問題の一つであり、1972年にそうであることが示された。 その他のアプリケーション:エッジカバー、頂点カバー
興味深い例: IBM finds computer viruses(wikipedia)
Elements-5000known viruses
Sets-9000個のウイルスから20個以上の連続したバイトの部分文字列、”良い”コードには見つかりません。
180のセットカバーが見つかりました。 既知のコンピュータウイルスの存在を確認するために、これらの180個の部分文字列を検索すれば十分です。
別の例:ゼネラルモーターズは、様々な供給の一定量を購入する必要があり、材料の異なる組み合わせのための様々なお得な情報を提供するサプライヤーがあ). Set coveringを使用して、コストを最小限に抑えながらすべての材料を取得する最良の方法を見つけることができますSource:http://math.mit.edu/~goemans/18434S06/setcover-tamara.pdf
Set Cover is NP-Hard:
問題は既知のNP-Hard問題であるため、この問題には多項式時間解はありません。 多項式時間Greedy近似アルゴリズムがあり、greedyアルゴリズムはLogn近似アルゴリズムを提供します。
例:
私たちは貪欲アルゴリズムを理解するために、上記の例を考えてみましょう。
最初の反復:
I={}
s1の新しい要素ごとのコスト=Cost(S1)/|S1–I|=5/3
S2の新しい要素ごとのコスト=Cost(S2)||S2–I/=10/2
S3の新しい要素ごとのコスト=Cost(S3)|/S3–I/=3/4
S3の最小値S3が追加されているため、iは{{{{{{}{}}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}1,4,3,2}。
第二の反復:
I={1,4,3,2}
s1の新しい要素ごとのコスト=Cost(S1)||S1–I/=5/0
S1はIに新しい要素を追加しないことに注意してください。
S2の新しい要素ごとのコスト=Cost(S2)|/S2–I/=10/1
S2はIに5しか追加しないことに注意してください。
貪欲アルゴリズムは、上記の例のための最適解を提供しますが、それはすべての時間最適解を提供しない場合があります。 次の例を考えてみましょう。
上記の貪欲アルゴリズムがLogn近似であることの証明。
OPTを最適解のコストとする。 上記の貪欲アルゴリズムの反復の前に、(k-1)要素がカバーされているとします。 貪欲アルゴリズムの現在のステップの前にカバーされていないk番目の要素iのコストとそれはOPTにあります。 貪欲アルゴリズムは最も費用対効果の高いSiを選択するため、選択されたセット内の要素ごとのコストは、OPTを残りの要素で割ったものよりも小さ したがって、K番目の要素のコスト貪欲アルゴリズムのコスト=n個の要素のコストの合計
ソース: