この方法は、リストに重複が含まれていない場合に有効です。おそらくそれらは最初に効率的に世話をすることができます。
フェンウィックツリーを使用して、O(n * log n)
時間とO(n)
時間の順列反転ベクトルを計算することができます。同じ番号のベクトルの連続したセグメントは、切断する必要がないセクションを表すことができます。残念ながら、彼らはまた、
6
と
3
がシーケンスのカット、
[1,4,5,7]
を意味するものではあり
Array: {8,1,4,5,7,6,3}
Vector: 0,1,1,1,1,2,5
、同様に、偽陽性を返すことができます。これに対処するため、各要素に続く小さな要素の数を表す2番目の逆ベクトルを取ります。両方のベクトルで平行な連続したセグメントを切り取る必要はありません。
Array: {8,1,4,5,7,6,3,0}
Vector: 0,1,1,1,1,2,5,7 // # larger preceding
Vector: 7,1,2,2,3,2,1,0 // # smaller following
|---| // not cut
Array: {3,1,4,5,2,8,7}
Vectors: 0,1,0,0,3,0,1
2,0,1,1,0,1,0
|---| // not cut
Array: {3,1,2,4}
Vectors: 0,1,1,0
2,0,0,0
|---| // not cut
質問はなぜグラフ理論またはマルチセットにタグ付けされていますか?たとえば、ここでグラフが役立つと思われる場合は、調査結果をGoogleにお知らせください。あなたの質問は努力や研究を示さない –
私はグラフ理論としてそれをタグ付けしました。なぜなら、グラフに関係していない多くの困難な問題はグラフ理論で解を持っているからです。私はこの問題をどのように解決するか考えていません。 – user128409235
@Paulいいえ、そうではありません。この例を見てみましょう:3、1、4、5、2、8、7.あなたのアルゴリズムは{3}、{1,4,5}、{2,8}、{7}私たちはこれらの部分から非減少のシーケンスを作ることはできません。 – user128409235