我们如何确保从一个最长的增长子序列和一个最长的减少子序列形成一个比特序列?

时间:2015-05-29 15:45:25

标签: arrays dynamic-programming

例如,我们有array[]={1,3,2,7,4,6,8,9}

array[]={1,3,4,6,8,9}的最长增加子序列及其长度= 6.

array[]={3,2}的最长减少子序列及其长度= 2.

然后是array[]={1,3,4,6,8,9}的Bitonic子序列?如果是,那么它的长度= 6.Bonic的子序列的长度= lis的长度+ lds -1的长度, 他们不平等。

如果没有,你怎么能证明比特子序列的长度= lis的长度+ lds-1的长度

如果我错了,请纠正我。 谢谢。

1 个答案:

答案 0 :(得分:1)

公式是正确的,仅给出6 ...考虑LIS [](作为LIS数组)和LDS [](作为LDS数组)..现在当你从左到右迭代时,你到达的位置LIS [index] = 6即LIS直到数组[7]为6 ..现在LDS [index = 7]为1(通常一个元素是系列的最大长度)......现在LIS [7] + LDS [7] -1 =(6 + 1-1)

现在你想要Bitonic序列的证明...... LIS [i],LDS [i]代表最长的增加/减少序列直到我! 现在,最终你想要最大化它,这就是你搜索样本空间的原因!所以答案最大为(LIS [i] + LDS [i] -1)0< = i< = n-1 ... 那个-1是由于元素在第i个位置重复包含!