正方配列の「重複しない」数値の合計を最大化-証明に役立ちます


7

質問はスタックオーバーフローに掲載されたこの問題を解決するためのアルゴリズムを求めて:

nxnの行列(Aと呼びます)があります。行列Aからポイントのサブセット(Bと呼びます)を選択します。サブセットはn個の要素で構成され、Aの各行と各列から1つだけの要素が取得されます。出力はソリューション( B)これらの制約を考慮して、Bを構成する要素の合計が可能な最大値になるようにします(たとえば、以下の例では25)。Bの複数のインスタンスが見つかった場合(つまり、同じ最大合計を与える異なるソリューション)、最大の最小要素を持つBのソリューションを選択する必要があります。

Bは、nxnの選択行列にすることもできますが、n個の目的の要素のみが非ゼロです。

例:A =

|5 4 3 2 1|
|4 3 2 1 5|
|3 2 1 5 4|
|2 1 5 4 3|
|1 5 4 3 2|

=> Bは

 |5 5 5 5 5|

は動的プログラミングソリューション提案しましたが、これは他のソリューションと同じくらい効率的だと思います。以下の提案されたアルゴリズムをコピーして貼り付けました。


  • してみましょうの正方形アレイもでの数字。
  • LETの要素示しにおける行と列目を。jij
  • LETはの正方形サブアレイの数値非重複の最適和を表す行の交点を含むがにと列がに。S12j1j212j1j2

次に、重複しない数値の最適な合計が示さS( 1:n , 1:n )れ、次のように与えられます。

S(1:n,1:n)=max{S(2:n,2:n)+A1,1S(2:n,1:n1)+A1,nS(1:n1,2:n)+An,1S(1:n1,1:n1)+An,
Note that S( i:i, j:j ) is simply Aij.

つまり、サイズの正方形の配列の最適な合計は、サイズnの4つのサブ配列のそれぞれの最適な合計を個別に計算し、n-1サブアレイと「省略された要素」の合計を最大化することによって決定できます。」

S for |# # # #|
      |# # # #|
      |# # # #|
      |# # # #|

Is the best of the sums S for:

|#      |      |      #|      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |# # #  |       |  # # #|
|  # # #|      |# # #  |      |      #|       |#      |

これは非常に洗練されたアルゴリズムであり、私はそれが正しいことを強く疑っていますが、正しいことを証明する方法を思いつきません。

問題が最適な下部構造を表示することを証明している主な難しさ。各計算の4つの潜在的な選択肢が4つだけの選択肢である場合、これは最適な部分構造を示すのに十分だと思います。つまり、次のことを証明する必要があります。

|   #    |
| #   # #|
| #   # #| 
| #   # #|

不可能(つまり、矛盾による証明)であるため、またはこの可能性が4つの「n-1正方形」のバリエーションの1つによってすでに説明されているため、これは有効なソリューションではありません。

誰かが私のアルゴリズムの欠陥を指摘したり、それが本当に機能している証拠を提供したりできますか?


しかし、アルゴリズムの時間の複雑さは何ですか?

1
最大一致?
Aryabhata

@SaeedAmiri:LaTeXマークアップをありがとう。そしてO(N^3)、それが機能しない場合を除いて、それが機能した場合はそうでした。だからプー。
Li-aung Yip、2012

私が何かを誤解していない限り、Traveling Salesmanからの単純な削減は、元の問題がNP困難であることを意味します。
JeffE 2012年

@JeffE:回答フォームで詳しく説明してもらえますか?
Li-aung Yip、2012

回答:


7

実際、あなたが提案した解決策が正しいとは思いません。このケースが必要になる例

|   #    |
| #   # #|
| #   # #| 
| #   # #|

かもしれない

| 1 2 1 1|
| 2 1 1 1|
| 1 1 1 2| 
| 1 1 2 1|

最適なソリューションは2つすべてで構成されますが、コーナーには1つしかありません。したがって、コーナーから開始するだけでは最適なソリューションを見つけることができません。


痛い。滅び。
Li-aung Yip、2012

5

この問題は、Kuhn-Munkresアルゴリズムや最小コストフローアルゴリズムなど、重み付き2部グラフの最大マッチングアルゴリズムによって解決できます。

2つの互いに素なポイントセットがとである2 部グラフ想像してください。各頂点は行に対応し、各頂点は列に対応します。エッジの重みの間とある、番目の要素マトリクスの行目。このグラフの重み付き最大マッチングは、問題の解決策に対応しています。GBabjBEjabjMjj

同点を打破するには、最初に最大重み付けマッチングの値を見つける必要があります。値をます。次に、行列すべての要素を並べ替えて、バイナリ検索を行う必要があります。値テストするとき、つまり、最小要素が以上の最大マッチングがあるかどうか、場合すべてのを変更し、最大値を見つける必要があります。変更された行列に一致します。は、最小要素が以上の解がある場合に限ります。WメートルaバツMメートルメートルMjMj<メートルWメートルaバツMWメートルaバツ=Wメートルaバツメートル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.