2016-04-14 6 views
-1

正の値が入力されたn行m列のグリッドがあるとします。グリッドからmin(n、m)の正方形を選択し、選択すると正方形の行と列を削除します。あなたの得点は、あなたが選んだ四角形の値の一部です。私は可能な限り最大のスコアを見つけようとしています。すべての可能性を踏む以外にこれを行う方法はありますか?もし私がすべてを通って列挙しなければならない場合、それを行う最も効率的な方法は何ですか?私はそれが違いがあれば、これをPythonで実装しようとしています。ありがとう。除外テーブルの最大合計スコア

+0

"グリッドから四角形を選ぶ"という意味を明確にすることはできますか? – spiffman

+1

コードワイズで既に試したことのいくつかの例を投稿してください –

+2

これは[加重2部グラフの最大一致の検索](https://en.wikipedia.org/wiki/Matching_(グラフ_理論)#In_weighted_bipartite_graphs) 。そのためのアルゴリズムを見てください。 – user2357112

答えて

1

これはfinding a maximum matching in a weighted bipartite graphに相当します。行と列はグラフのノードに対応し、table[u][v]が0以外の値xを持つ場合、行ノードuと列ノードvの間には重みxがあります。最大一致で選択されたエッジは、選択する非ゼロセルに対応します。一致する部分の幅がmin(n, m)未満の場合は、表のセルの残りのオプションはすべて値が0なので、残りのセルは任意に選択できます。 (テーブルに負のエントリがある場合は、グラフを構築する前にすべてのエントリが非負であることを確認するために、すべてのテーブルエントリを上に調整する必要があります)。NetworkXigraphのようなグラフライブラリは、テーブルをグラフに変換し、困難な作業をライブラリに委譲することができます。

+0

私は確信していない部分は、あなたの否定的なエントリについてのカッコである...すべてのウェイトに定数cを追加すると、すべてのウェイトが正であっても最大重み付きマッチングでエッジの数*を増やすことができます(各追加エッジは別のcポイントを付与するので)から始めるため、これを行うことによって最適性が保持されているかどうかはわかりません。他に何か覚えていますか? –

+0

@j_random_hacker:質問者は、min-n(m)のグリッドセルを選択する必要があります。これは常にmax-cardinalityのマッチングを選択することに相当します。そのようなすべてのマッチは、すべてのテーブルエントリに定数を追加することによって、そのウェイトが均等に影響を受けます。 – user2357112

+0

ありがとう、私はこの特定の二部グラフが完全であることを忘れていたので、すべてのエッジが正の重みを持つ場合、最大重みの一致は必然的にmin(n、m)のエッジを持ちます。あなたの答えに「完全」を加えることをお勧めします。 –

関連する問題