私は、有向グラフ最大頂点サイクルカバーを見つけるためのアルゴリズムを見つけようとしてきました。つまり、可能な限り多くのサイクルを持つすべての頂点を含む、互いに素なサイクルのセットです。ここでは個々の頂点が循環します)。最小の頂点サイクルカバーを見つける問題と、正確にサイクルの頂点サイクルカバーを見つける問題は、NP完全であることを知っています。しかし、最大のケースはどうですか?G k
私はこの一般的な興味深い答えを見つけますが、私がこれを使用したいグラフは実際にはその構造によってかなり制約されています。
整数のリスト、要素あり、、要素を使用して、ソート後にを参照します。例として:L I S S I L
グラフの頂点は、およびようなペアで識別されます。場合にのみ、グラフには有向エッジがあります。(このグラフのサイクルは、ソートされた位置で終了するように循環的に置換できる値のセットに対応しています。)l i = n s i ≠ n (n 、i )→ (m 、j )s j = n
上記の例では、次のグラフが生成されます(1ベースのインデックスを使用)。
うまくいかないことの1つは、最小サイクルを繰り返し削除する貪欲なアプローチです(この例が示すように)。
この問題は(間違いを犯さなかった場合)与えられたリストをソートするためにいくつのスワップが必要かを尋ねることに相当することに注意してください。(そもそもこの問題を調べるきっかけとなったのは、これです。)
ジュホの答えからいくつかの指針と文献を少しふるい分けた後、私は非常に密接に関連していると思われる課題の問題に出くわしました。ただし、割り当て問題は重み付き2部グラフの観点から定式化されており、これまでのところ、この問題を軽減するためのエッジと重みを選択する方法を見つけることができませんでした。ここで重み関数を最小化するという点で問題を定式化する場合、直感的なアプローチは各サイクルの重みがであると言うことですここでサイクル内のエッジ(または頂点)の数です。(もちろん、これは重みを設定することと同じです。| C | − 1。)つまり、重みはサイクルに含まれる特定のエッジではなく、サイクルのサイズに依存します。しかし、これは誰かに問題を軽減する方法についての別のアイデアを与えるかもしれません。
また、サイクルのサイズを制限すると、一般的なグラフの問題がAPX困難になるようです。これは、サイクル数を最大化するタスクにも、ここで検討中の特定のグラフにも同じことが必ずしも当てはまるわけではありませんが、重要である可能性が十分に密接に関連しているようです。
要約すると、上記のプロセスから作成されたグラフについて、最大の頂点の素なサイクルのカバーを見つけることができますか?
2つの側面として、最大頂点の互いに素なサイクルカバーが、少なくとも1つのサイクルカバーを許容する任意のグラフの効率的なソリューションを持っているかどうか(おそらく主な質問への答えとして落ちる)にも興味があります最大カバーのサイクル数を決定するだけで(それぞれに含まれる実際のエッジとは対照的に)、問題はより単純になります。人々が自分で本格的な答えに値すると思う場合、これらを個別の質問として投稿できてうれしいです。