2017-07-26 9 views
1

私は特定の数から生成したペアのリストを持っています。私の質問は、私がそれを理解したように私のペアがどのように計算されるかに関しては関係ありませんが、可能な限り多くのペアを最大限にしています。例えば
ペアのリストのペアの最大数を見つける

{1:[19,13,21], 
3:[7,19], 
7:[3,19,13], 
19:[1,3,7,21], 
13:[1,7,21], 
21:[1,19,13]} 

1の結果は、19、13、または21 3とペアリングすることができる

[1,3,7,19,13,21] 

そうで7または19と対とすることができます。私の目標は、ユニークなペアリングを最大限にして、ペアのないポイントを最小限に抑えることです。この場合、1-13、3-7、および19-21を持つことができ、残りは0になります。しかし、あなたは1-19、7-13もやって、相手がいなくても3と21を残すことができます。

以前にこの問題を処理していたアルゴリズムはありますか?私はそれらをグラフに入れ、ハミルトニアンの最大の経路を見つけようと考えましたが、それは事実上不可能と思われます。私はPythonでこれをやっているので、コンテナとして使用している辞書とリストがあります。

編集:数字がペアになるかどうかの条件は、ペアと特定のパターンを形成するかどうかです。 2つの数xとyが与えられると、x == yになるまでこのパターンに従うか、それは永遠に続く。 x <yの場合、 y = y - x、x = 2 * xです。そして、それはあなたが記述問題は、(ijとペアになっている場合、あなたの例では、その後、jiと対になっているので、あなたがすることによって、それらを接続することができ、グラフでmaximal matchingを見つけることです

+0

これは私には間違った質問ですが、2つの数字がペアになる条件は何ですか?たとえば、あなたの最後の例では、なぜ3と21のペアはできませんか? –

+0

ペアリングについて説明した編集で追加しました。 – Mathochist

答えて

0

...など、再び行きます縁)。以下のpython packageおよび this codeには、関連する実装が含まれています。

+0

はい!それは私が探していたものですが、私が望むのは最大マッチングですが、既存のパッケージはマキシマムマッチングしか見つけられないようです。 – Mathochist

+0

@Mathochistはい、実際には、「アルゴリズムは、グラフGの最大のマッチングMを貪欲に選択する(すなわち、Mのスーパーセットは存在しない)」と書いている。これは、それが実際に最大のカーディナリティマッチングを見つけることを主張するようです:http://code.activestate.com/recipes/221251-maximum-cardinality-matching-in-general-graphs/ –

関連する問題