私の問題の解決策がどこにも見つかりません:(。誰かが私を助けて、コメント付きでこのアルゴリズムを見つける(または書く)ことができますか?
ビッグありがとう!
ベクトル 'v[x] = y' を保持します。ここで、y は、長さ x の最長増加サブシーケンスを与える元のシーケンスの最小要素です。もともと持っているのは だけv[0] = -inf
です。
要素のシーケンスをトラバースし、バイナリ検索を使用a
してベクトルで検索します。v
正確にはわかりませんa
が、そのような最大x
のものv[x] <= a
(< 厳密に増加している場合)。したがって、a で終わる最長の増加部分列は長さになりx+1
ます。ここで a に更新v[x+1]
します (a よりも小さくすることはできません。それ以外の場合は、検索に returnx+1
が必要です)。ベクトルを拡張する必要がある場合があります。
LIS の長さはベクトルのサイズです。ソリューションを再構築する必要がある場合は、使用した位置を追跡してください。