次の問題のアルゴリズム: 2D平面でn点の集合Sを与えると、点(x1、y1)はx1> x2ならば点(x2、y2)を支配し、 y1> y2である。 MがSのサブセットであり、Mのどの点もSの別のポイントによって支配されないような最大の点集合Mを見つける。最大非支配集合のアルゴリズム
答えて
x座標を増加することによってすべての点をソートする。 2つの点のx座標が同じ場合は、y座標を小さくして並べ替えます。ここで、y座標がソート順で増加していない場合、つまりy座標がサブシーケンス内の前の座標よりも小さいか等しいことを意味する場合にのみ、サブセットのポイントが非支配的であることがわかります。
だからアルゴリズムは次のようになります。上記のように
- ポイントをソート。時間:O(n * logn)。
- y座標の最も長くない非増加部分列を見つける。時間:O(n * logn)。これは、longest increasing subsequenceを見つけるためのアルゴリズムを適合させることによって行うことができる。
これは、O(n * logn)で可能な限り大きなセットを与えます。
私は#2が "最長非増加サブシーケンス"を求めなければならないと信じていますか? –
@JanDvorakあなたは正解です、ありがとうございます。 – interjay
実際の問題は、MのどのポイントもSの別のポイントによって支配されていないことを尋ねます。 – user1256960
O(n * logn)時間にこれを行う分割征服アルゴリズムがあります。
ポイントをx座標に基づいてサイズn/2の2つの半分に分割しましょう。我々は、両方の半分に非支配的な点集合を見つける。右半分にあるすべての非支配的な点が最終的なリストに存在することを観察する必要があります。
この見解では、結合ステップを書くことができます。右半分の非支配点のy座標のうち最も低いy座標よりも左下のすべての非支配点を削除しますハーフ。私たちは非支配的な点のセットを持っています。
アルゴリズム:時間
Find the median along x axis - O(n) time
Find non-dominated points in the right half - T(n/2)
Find non-dominated points in the right half - T(n/2)
set of non-dominated points could be on O(n) so, the combine step might have to check O(n) points
式:
T(n) = 2T(n/2) + O(n) which is O(n*logn)
あなたは、H、非支配点の数であり、O(N * LOGH)このさらに向上させることができ問題の詳細を把握する必要があり、作業を進める上では優れた拡張方法です。
- 1. 最大独立独立集合アルゴリズムの時間複雑度
- 2. 最大不連続集合の集合
- 3. アルゴリズム点の集合
- 4. 配列の最大部分集合の和を求める
- 5. 配列の最大差を求める - アルゴリズムの最適化ソリューション
- 6. 最大3色アルゴリズム
- 7. 最大要素。アルゴリズム
- 8. Pythonの非バイナリツリーの最大合計
- 9. 粒子集合最適化(PSO)アルゴリズムの群れ
- 10. コストが最も低い部分集合を求めるアルゴリズム
- 11. JavaScript:非常に大きな配列の最小値と最大値?
- 12. 最大サブアレイ(Kadaneのアルゴリズム) - テイル再帰
- 13. 最大ペア数の計算アルゴリズム
- 14. 最大四角形アルゴリズムの実装
- 15. SQLでは、非集計の最小/最大演算子がありますか
- 16. 非常に大きな行列を含むMatlabアルゴリズムの最適化/ベクトル化
- 17. Cでセマフォ集合のセマフォの最大数
- 18. 間隔の集合の最大深さを求める
- 19. 最適PayPal支払いの統合オプション
- 20. OpenCVの非最大抑制
- 21. 支払いコンバージョンを最大化する最小限のフィールドは?
- 22. ランダム化アルゴリズム確率最大化
- 23. 大集合の2つの集合 - その和の一部
- 24. 最後の一定時間内の合計イベントを収集するアルゴリズム
- 25. 最短ジョブ優先アルゴリズム(非プリエンプティブ)
- 26. 2つの配列の要素の積の和を最大化するアルゴリズム
- 27. 配列から最大のユニークなアイテムの組み合わせを見つけるアルゴリズム
- 28. 2つの配列の要素の積(SOP)を最大にするアルゴリズム
- 29. 最大合計
- 30. 合計の合計値がXとYの間で最も小さいオブジェクトの集合を見つけるアルゴリズム
ちょっとした問題ですが、ありがとうございます。 –
user1256960で、セット名SとMを追加して質問を編集しました。最後の文では、「Mの別のポイント」を「Sの任意のポイント」に変更してください。 (元の質問は、他の点がSかMかどうかについて曖昧でした) –
これは、基本的に、拘束グラフ上の最大独立独立問題です。一般的な問題はNP完全なので、 'O(2^n)'より悪くなることはありません。 –