最坏情况运行时间

时间:2014-10-31 02:11:14

标签: recursion big-o time-complexity

我有以下代码片段:

public static boolean sumSearch(int[] a, int n, int x) {
    if (n == 0) {
         return ( x==0 );
    }
    return (sumSearch(a, n-1, x-a[n-1]) || sumSearch(a, n-1, x));

所以从我收集的内容来看,第三个参数是否重要?由于返回x == 0对于最坏情况无关紧要,因为n-1是完成的,所以最坏的时间复杂度只能是O(n)?这是正确的思路吗?

1 个答案:

答案 0 :(得分:1)

嗯,考虑到这类问题是NP-Complete,我认为我们可以排除O(n)的时间复杂度。我认为这个算法的最坏情况时间为O(2 ^ n)。如果你把这些调用想象成一棵树,那么树的每个“级别”都会有两倍于之前的级别,这当然是O(2 ^ n)。