2016-08-15 3 views
7

私はこのような現実世界の問題に遭遇しました。グループにソートする必要があるペアのリストがあります。グループのメンバーは、グループの他のメンバーと要素を共有できないという制約で、合計したグループの数を最小限に抑えたいと考えています。グループ内の各アイテムが他のメンバーと共通の要素を共有しないようなグループタプル

ここは例です。タプルのリストは(A、B)、(B、C)、(C、A)、(D、E)、(F、G)です。 [(A、B)、(D、E)、(F、G)]、[(B、C)]、[(C、A)]の3つのグループを形成することができます。

この問題を多項式時間で最適に解くことは可能ですか?貪欲なソリューションはどれくらい悪いですか?これは別の問題として提起されている可能性がありますが、私はそれを他のものに減らす方法をかなり理解できません(グラフの色付けが気になります)。

+1

もっと長いサンプルを投稿したり、実際の入力のサイズを考えてもらえますか?重複するタプルが存在する可能性はありますか?すべての要素が多かれ少なかれ同じ回数出現すると思いますか? – m69

+0

入力のサイズは20-60(ペア)の範囲です。重複タプルは存在しない。すなわち、(A、B)が集合内にある場合、他の(A、B)または(B、A)は存在しない。私は個々の要素の分布知識を持っていません(実際には、いくつかの要素が他の要素よりも頻繁に出現すると思われますが、問題のためにこれが当てはまるとは思いません。 –

+0

入力にはどのくらいの別個の文字(またはそれらが表すもの)がどれくらいあるのですか?グラフの最小頂点 - カバー - サイズ(https://en.wikipedia.org/wiki/Vertex_cover#Approximate_evaluation)とその[補足グラフ](https://en.wikipedia)を試してみましたか? org/wiki/Complement_graph)?あなたはあなたのグラフの[treewidthに近似する](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.29.7198&rep=rep1&type=pdf)を試しましたか? –

答えて

6

前述の問題は、edge-coloring problemと考えることができます。各タプルエントリがノードであり、エッジがタプルによって与えられるグラフがあります。タプルをグループにクラスタリングすることは、端点(マッチ)を共有しないエッジのグループを見つけることに相当し、エッジカラーで同じ色を割り当てることができます。言い換えると、各エッジの色分けによってクラスタリングが行われ、各クラスタリングによってエッジの色付けが行われます。残念ながら、NP -hardは、最高の色付けを見つけるため、問題は一般的にNP -hardです。この問題の近似アルゴリズムは定数因子近似を生成しますが、P = NPがない限り、正確なアルゴリズムはありません。

タプルごとに任意の数の要素を許可するようにこの問題を一般化すると、この問題はより困難になります。この問題の一般的なバージョンは、実際にはNP -hardであり、グラフの色付けからの削減によって、実際には近似しにくいです。特定のケースの削減の例を示しますが、それは非常にうまく一般化します。

このようなグラフを考える:

A -- B -- C 
| | | 
D -- E -- F 

我々は、タプル内の各エントリは、そのノードに隣接するエッジの集合であるタプルの集合、各ノードに1つずつ、作成します。例えば、上のグラフでは、我々はこれらのタプルを形成したい:

(AB, AD) 
(AB, BC, BE) 
(CB, CF) 
(AD, DE) 
(BE, DE, EF) 
(CF, EF) 

は今、これらのタプルの2が重複していないことを想像してください。これは、それらのタプルに対応する2つのノードが隣接していてはならないことを意味する。なぜなら、それらの間のエッジはタプル内の共通要素であり、したがってそれらはクラスタ化できないからである。一方、2つのノードが隣接していない場合、それらのタプルは、同じタプル内のエッジが他のタプルに存在しないので、同じクラスタ内に一緒にグループ化することができる。

元のグラフを着色すると、タプルをクラスタリングする方法が提供されます(同じ色のノードのすべてのタプルを同じセットに入れます;それらのどれも隣接しないので競合しません)。タプルをクラスタリングする任意の方法では、色付けが行われます(クラスター内の各タプルに対応するすべてのノードを同じ色に色付けします)。したがって、クラスタの最小数を見つけることは、NP -hardであり、真の値に近いところに近づく近似アルゴリズムを認めることは知られていない元のグラフの色数を見つけることに対応する。

+0

ここには潜在的な問題があります。実際にはタプルはペアに限定されているようです(OPは「タプル」の前に「ペア」という言葉を使用しますが、あいまいです)ので、ノードのインシデントエッジの*セット*を*対応するノードがエッジを共有する場合、2つのタプルが重複するような方法で単一の*タプルが生成されます。私はあなたが*複数*タプルを使用してこのセットをエンコードすることができると思いますが、頂点に対応するタプルが複数のクラスタに分散される可能性があるので、タプルのクラスターからカラーリングに移動する方法は少なくともわかりません。 –

+0

@j_random_hacker私はそれを気づいた...私はこれを書いた後。 :-)上部の彩色について言及する編集は、この事実をより正確に解決し、NP硬度を確立するはずです。 – templatetypedef

+0

その人たちには申し訳ありません。私はそれを実現し、それを一方または他方に制限するべきだった。実際には、この問題は要素のペアを調べているだけです。 –

関連する問題