2つの数値を使用してLISの長さを見つける方法。 例えば、 [(1,2)(7,8)(3,4)(5,6)] 上記の配列シーケンスでは、 )(3,4)(5,6)] アイデア?2つの数値を持つLIS(Longest Increasing Subsequence)
答えて
は、次の2つの修正を加えて、標準LIS problemのための任意のalgorithmを使用することができます。
- は、第二の数は厳密に最初の数よりも大きくはない任意のペアを捨てます。
- AおよびB(すなわち
A < B
)では、最初のLISを見つけ、その基数を計算しなければならないB.
タプル自体の最初と2番目の数字は、常に昇順です(これはあなたの例のようです)。これは基本的に若干の変更以外にregular LIS algorithmと異なるものであってはいけません。最後の数が現在のタプルの最初の数よりも少ない現在のタプル。ダイナミックプログラミングを使用して、各シーケンススポットの最大LISと先行タプルをキャッシュします。
の最初の数の第二の数を比較する必要があるペアの比較演算子
私はあなたがいることを、小さな例外を除いて標準LISアルゴリズムを使用することができると思う - あなたは私がインデックスi + 1でインデックスを比較するとき
- I + 1の低い値で、iの上限値を比較します。
EDIT:これはもちろん、すべての範囲が最初に小さい番号を持ち、次に高い番号を持つと仮定します。
問題をグラフでモデル化します。各タプルはノードになることができます。第1のタプルが第2のタプルよりも厳密に小さい場合(ここでは、「少ない」とはタプルの両方の値がより少ないことを意味する)、あるノードから別のノードへ有向エッジが存在する。
このグラフでは、最長増加サブシーケンスが最長のパスになりました。このグラフにサイクルは存在しないことに注意してください(つまり、DAGです)。 DAG内の最長のパスは、動的プログラミング(wikipediaを参照)によって見つけることができます。
私はあなたが何を頼んでいるのか分かりませんが、< cとb < d(これは、 。
in another SO threadと記載されている標準の動的プログラミング手法を適用することで、これはO(N^2)時間で簡単に解決できます。
古典的なO(N log N)solution to the standard LIS problemは、いくつかの難しさで、ペアのLIS問題の準二乗解を与えるために拡張することができます。可能なすべての長さに対して最小値を1つ記憶するだけではありません。各長さのすべての最小ペアを含む「階段状」構造、すなわち、hereと記載されているデータ構造のN個までのコピーを維持しなければならない。次に、O(log N)時間内にこの構造の1つのコピーを照会し(バイナリサーチステップのためにO(log^2 N)時間を与える)、O log^2 N)時間である。これは私が問題に知っている最速の解決策です。
単純配列のLISを見つける場合に実行します。ただ1つの比較を行うだけで、両方の要素を比較してください。それはLISにO(n^2)時間の複雑さを与えます。
- 1. 'longest increase subsequence'問題を解決するアルゴリズムを説明してください
- 2. 2つの値を持つPHPスイッチ
- 3. 2つのオブジェクトを持つビルド関数
- 4. 2つの関数を持つモジュール
- 5. 複数の値とnull値を持つパラメータを持つMDXクエリ
- 6. 2つの数値変数を持つインスタンスプロパティを設定する方法
- 7. 最大2つの値を持つ列値を更新する
- 8. パラメータ値を持つ関数値を持つJSON
- 9. 2つのカテゴリ変数と2つの定量変数を持つドットプロット
- 10. 繰り返し値を持つ2つの列を持つデータフレームのプロット
- 11. 2つのModalViewControllersで変数の値を保持
- 12. 2つの列(SQL)に同じ値を持つ行を数えるには?
- 13. 2つのレベルのディレクティブの引数を持つコールコール親関数
- 14. 複数の値を持つコマンドライン引数
- 15. 複数の値を持つキーを持つHashMap
- 16. 複数の値を持つフィールドを持つSQL SELECT文
- 17. 2つの列の値を持つテーブルを更新する
- 18. 値ごとに複数のキーを持つ2次元辞書
- 19. 2つのリストの引数を持つ関数
- 20. Riot.js 2:falsy値を持つ属性
- 21. 2つの値を持つ同じ列を検索するMySQL
- 22. 2つの値を持つ配列を検索する
- 23. HighCharts - 2つのY軸、最大値を持つもの
- 24. 2つの数値の間の素数を見つける
- 25. cbind異なるローン数とロー数を持つ2つのデータフレーム
- 26. 2つ以上の値を持つHTML5 LocalStorage
- 27. 2つの異なる値を持つStruts2 selectタグ
- 28. 複数のインデックスを持つDoctrine 2
- 29. Doctrine 2複数のjoinColumnを持つManyToOne
- 30. 複数のプロパティを持つ2つの配列をフィルタリングする
見た目はどうですか? (1、5)<(2,6)か?もしそうなら、以下のマーク付きの答えはうまくいかないでしょう。 –