繁体   English   中英

大O分析-While循环

[英]Big-O Analysis - While Loops

给我一个编程问题,给定一个数组,确定它是否是二叉树的后遍历。 我的解决方案如下:

public static boolean isPostOrder(int[] array) {

    int root = array[array.length - 1];

    int i = 0;

    while(array[i] < root) {
        i++;
    }

    while(array[i] > root) {
        i++;
    }

    return i == array.length - 1;

}

我正在尝试了解BigO。我已阅读此教程:

“ Big O”符号的简单英语解释是什么?

但是,我仍然对加法和while循环感到困惑。 我假设在这种情况下,我的while循环是O(1),因为我们只是将数组中的值与整数进行比较,还是我错了?

现在加法也是O(1),因为我们只是将1加到某个整数1上,对吗?

因此,这是O(1)解决方案还是我错过了什么?

您的算法运行时与输入大小有线性关系,因为您在输入数组的元素之间循环。 这使得您的算法为O(n)。 如果您没有任何循环,那将是O(1)=恒定的访问时间。

Big-O表示法的基本思想是估计算法执行的基本运算的数量,以及输入的大小如何影响它。

在这里,您的基本操作是增加i( ++i )。 您正在遍历大小为N的数组,在最坏的情况下,将遍历所有大小。 因此,该算法具有O(N)复杂度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM