java - Big O 表示法的复杂性

标签 java big-o

我一直在做一些问题,但没有提供答案,所以我想知道我的答案是否正确

a) 假设 a[i....j] 是一个包含 n 个元素的整数数组,x 是一个整数

int front, back;

while(i <= j) {

    front = (i + j) / 3; 
    back = 2 * (i + j) / 3;

    if(a[front] == x)
        return front;
    if (a[back] ==x)
        return back;

    if(x < a[front])
        j = front - 1;
    else if(x > a[back])
        i = back+1;
    else {
        j = back-1;
        i = front + 1;
    }
}

我的答案是 O(1),但我感觉我错了。

B)

public static void whatIs(int n) {
    if (n > 0)
        System.out.print(n+" "+whatIs(n/2)+" "+whatIs(n/2));
}

ans:我不确定是 log4n 还是 logn,因为递归发生了两次。

最佳答案

A) 是的。 O(1) 是错误的。您将循环多次,具体取决于 ijx ...以及数组的内容。计算出在最好最坏情况下循环了多少次。

B) 使用 log(a*b) -> log(a) + log(b) 简化 log(4*n)(基础高中数学),然后应用大 O 的定义。

但这也不是正确的答案。再次,您应该回到首要原则,并计算对于给定参数 n 值调用该方法的次数。并通过归纳法进行证明。

关于java - Big O 表示法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10084219/

相关文章:

Java -cp 目录不工作,文件工作正常

java - 由 'B<T> extends A<T>' 定义,A Class<T> 变量似乎是逆变的

algorithm - 计算列表中两点的最大距离的最有效方法是什么?

algorithm - 可微函数的大 O 证明

java - 在 Eclipse Maven 项目中更改动态 Web 模块版本

java - 在不同的细节带中迭代相同的数据

java - PostgreSQL:遇到无效的字节序标志值

algorithm - 该函数的正确时间复杂度是多少

c++ - 使用计数器变量测量运行时间

algorithm - 为什么这个算法的空间复杂度是O(n)?