2017-08-01 10 views
-3

この問題のJavaアルゴリズムを見つけるには、何か助けが必要です。 クラスAとクラスBの間にリンクがあります。 は、今私は、次の表を持っている:
Table with links between A and B
Xは、問題は、私はAさん のすべてを「ヒット」してBさんの最小セットを見つけるのですかある今 ヒットセットのようなものを見つけるアルゴリズムが必要

AnとBnとの間のリンクが存在することを意味しますたとえば、これを貪欲アルゴリズムに実装すると、Aとのリンクが最も多く、残りの部分を埋めるために他のものを探しているのでB3が必要になります。これは私に3 Bのセットを与えるだろう。しかし、私はB4とB5を取るためのアルゴリズムが必要です。なぜなら、最小のセットであるからです。

私はあなたに質問したい質問は、この問題の良いアルゴリズムは何ですか?この種の問題に「人気のある」アルゴリズムはありますか?私はそれがヒッティングセット問題のようなものだと思ったが、グラフ表現を得ることはできない。私は名前や技術用語のようなものを知っていないので、この問題を探すのも難しいです。

ご協力いただきありがとうございます。

+0

これはNP完全な問題ですので、ある意味では良い(既知の)アルゴリズムはありません。あなたの例が小さい場合は、単純にすべてのサブセットを列挙し、Aをカバーする最小のものを選ぶことができます。 –

答えて

0

問題を使用する

http://www.geeksforgeeks.org/greedy-algorithms-set-6-dijkstras-shortest-path-algorithm/

試しをたくさん助けになると思い、それでは何も知られているシンプルな(正確な)解決策はありません速くなることが保証されています。

例が小さい場合は、Bのすべてのサブセットを列挙し、Aをカバーする最小のものを選んでください。明らかに、それは最良の場合でも指数関数的です。

より良いアプローチは、合理的なソルバーが存在する別の形式で問題を表現することです。このような形式の1つは、整数線形プログラムである。

あなたの例を表す整数リニアプログラムです。

Minimize 
obj:b1+b2+b3+b4+b5 

Subject To 
b1+b2+b3+b4 >= 1 
b2+b4 >= 1 
b3+b5 >= 1 
b1+b2+b3+b4 >= 1 
b1+b2+b3+b4+b5 >= 1 
b3+b4 >= 1 
b5 >= 1 

Bounds 
0 <= b1 <= 1 
0 <= b2 <= 1 
0 <= b3 <= 1 
0 <= b4 <= 1 
0 <= b5 <= 1 

End 

"minimize"句は、可能な限り小さな解決策を望むという考えを捉えています。 "件名"句の末尾には、A[i]が含まれるようにソリューションが制限されています。 (注意:あなたの例では、Aのいくつかがまったく同じセットのBに隣接しているため、いくつかの制約が重複しています。

GLPK(または他の整数リニアプログラムソルバーの多く)はこれを解決することができます。また、ソルバーとのインタフェースを持つJavaライブラリもあります。

あなたはここにこのオンラインを実行することができます。http://hgourvest.github.io/glpk.js/

出力は次のようになります。

GLPK Simplex Optimizer, v4.49 
7 rows, 5 columns, 20 non-zeros 
Preprocessing... 
4 rows, 4 columns, 12 non-zeros 
Scaling... 
A: min|aij| = 1 max|aij| = 1 ratio = 1 
Problem data seem to be well scaled 
Constructing initial basis... 
Size of triangular part = 4 
0: obj = 1 infeas = 4 (0) 
*1: obj = 2 infeas = 0 (0) 
*2: obj = 2 infeas = 0 (0) 
OPTIMAL SOLUTION FOUND 
{"b1":0,"b2":0,"b3":0,"b4":1,"b5":1} 

を最後の行では、あなたが最適解が{B4, B5}である最小のセットに対応するb4=b5=1で見ることができます。

-1

すべての欲張りアルゴリズムを試しましたか?ヒットをアルゴリズムにマップする方法を理解する必要があります。私は、NPが完了すると、このリンクはあなたが隣接リスト表現

http://www.geeksforgeeks.org/greedy-algorithms-set-7-dijkstras-algorithm-for-adjacency-list-representation/

+0

提供されたリンクが古くなったり壊れたりすると、この回答は役に立たなくなります。あなたの答えにさらに情報を追加してください(もしそうなら) –

関連する問題