运行时复杂性和LIS的正确性

时间:2016-12-21 11:32:48

标签: javascript algorithm time-complexity lis

function LIS(str1){

return LISUtil(str1, 0);

function LISUtil(str1, index){
    if(index == str1.length){
        return 0;
    }
    var min = str1[index],
        len = 1;

    for(let i=index+1; i<str1.length; i++){

        if(min < str1[i]){
            len++;
            min = str1[i];
        }
    }
    return Math.max(len, LISUtil(str1, index+1));
}

}

这是我提出的最长的后续序列(是的,它看起来很奇怪,但请暂时忽略它!)。

我读过LIS的运行时复杂度为2 ^ n。使用DP,您可以将其设为n ^ 2.

当我想到并尝试我的LIS功能时,我确信它在n ^ 2中运行。它经过n,每个索引被检查O(n)次 - &gt; N ^ 2

我运行了一些测试用例,它确实正确返回。但是我没有使用过DP ......这意味着它必须是这两个中的任何一个。

  1. 我的功能错了。它没有得到LIS。
  2. 运行时间是2 ^ n,我只是无法正确计算运行时间。
  3. 有人能帮助我理顺我的想法吗? 我的函数是错误的,是运行时2 ^ n,还是可以在没有DP的情况下获得LIS?

1 个答案:

答案 0 :(得分:0)

它没有获得LIS。例如,

LIS([1, 6, 2, 3, 7, 4, 5])

返回3.应为4。