二元搜索函数的时间复杂度和空间复杂度

时间:2018-06-11 19:16:01

标签: java time-complexity binary-search space-complexity

我在Java;

中写了以下函数
int foo(int a[], int n) {
    int num1 = 1, num2 = 1; 
    while(num1 < n) {
        if (binarySearch(a,num1,num2) >= 0) {
            return num2;
        }
        num1 = 2 * num1;
        num2 = 2 * num2;
    }
    return 0;
}

我试图弄清楚这个功能的时间复杂性和空间复杂性。我知道binarySearch的时间复杂度为O(logn),此函数的空间复杂度为O(1)。有了这些信息,我试着从foo函数中计算出这些东西。我认为foo的时间复杂度为O((logn)^2),空间复杂度为O(1),但我不确定。计算这些东西的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

让我们在没有while调用的情况下分析简化的binarySearch()循环:

while(num1 < n) {
    num1 = 2 * num1;
}

根据n

,这需要多少步骤

一旦你回答了这个问题,最终解决方案的关键是要认识到while循环的复杂性会增加其身体的复杂性。这意味着最终答案是上述问题时间log n的答案。