行列が1の1つの接続された領域で構成されるように、最小数1を見つける


8

ましょであるマトリックス。2つのエントリが水平または垂直に隣接していて、両方のエントリが1である場合、それらは隣接していると言います。追加する1の最小数を見つけたいので、すべての1は一連のネイバーを通じて別の1に到達できます。M(0,1)111

例:

100
000
001

ここでは3 1が必要です1

100
100
111

追加する1の最小数とその場所を効率的に見つけるにはどうすればよいですか?


多くの場合、問題を別のタイプの問題としてキャストすると便利です。たとえば、今回はグラフの問題としての行列の問題です。これにより、グラフ理論のすべてのツールを使用できます。一見すると、あなたの問題は私にとって最短経路の問題のように見えました。
Juho 2012

回答:


5

あなたの問題をグラフでモデル化すると、あなたの問題はシュタイナーツリー問題のようになります

最も簡単な定義については、こちらをご覧ください。

頂点のサブセットが端子として識別されている加重グラフが与えられた場合、すべての端子を含む最小加重接続サブグラフを見つけます。

ご覧のように、一般的にはNPCですが、グラフがグリッドグラフの場合、適切な解決策が見つかるかもしれませんが、現在の例(端子が境界にある場合)の場合、グリッドグラフペーパーでスタイナーツリーを確認できます。

とにかく、シュタイナーツリー問題には優れたヒューリスティックがあり、同様のアプローチを問題に適用できます。

PS:隣接1は接続されたノードであると想定できます。その後、それらのエッジを縮小して新しいグラフを作成できます。新しく作成されたグラフは平面であり、スタイナーツリーを解くことができれば問題を解決できますが、シュタイナーツリーから独立している問題の良い解決策があります。


2
誰かが不思議に思っている場合でも、エッジに単位重量がある場合でも、問題はNP完全のままです。
Juho

@mrm、はい、実際にはウィキペディアのリンクに、加重されていないバージョンが(暗黙的に)記載されてます。その一般化を参照してください。一見するとウィキリンクがはっきりしないのではないかと思ったので、簡単な定義を引用しました。

また、結果のグリッドグラフの境界にあるために、すべての1がマトリックスの境界にある必要があるわけではないことに注意してください
Joe

あなたは、OPの問題をStiener Treeに削減しているようです。StienerTreeは少なくともOPの問題と同じくらい難しいということです。逆ではありません。つまり、最初の文は誤解を招くものです。もちろん、あなたがリンクしたWikiページは、Rectilinear Stiener Tree問題についても話します。これは非常に関連があるようです。
アリヤバタ2012

@Aryabhata、いいえ、私は削減を行いませんでした。OPの問題のいくつかの形式はStiener Treeの問題とまったく同じです。したがって、少なくともStiener Treeと同じくらい難しいですが、前述のとおり、OPの問題はグリッドで機能し、 Stiener Treeはグリッド上で解くことができます。彼は自分の問題に対してこれを行うことができますが、直線の場合はグリッドよりも難しいです。実際、グリッドは直線のグラフの特別なケースなので、グリッドの特別なケースを解決できるグリッドグラフの論文を提案しました、すべてで、私は彼の問題は、NPCや、このようなものである、とあなたが思うならば、私は、これはそれを削除することを教えてくださいと述べたことを言ったことはありません。P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.