繁体   English   中英

如何确定以下算法的时间复杂度(big-Oh表示法)?

[英]How to determine the time complexity for the following algorithms (big-Oh notation)?

我在这里是一个全新的人,我所与之抗争的是了解Big-oh符号概念。 最近,我在学校开始了“数据结构和算法”课程,“ Big-oh”这个词对我来说是非常陌生的。 我在网上搜索了很多有关该主题的内容,但没有一个单独的解释令我满意。 但是,我认为,用一个示例来理解该符号比仅以通俗的英语进行解释要好得多。

我将以下两个for循环用作练习目的。 您能解释一下这些算法的时间复杂度(用大哦表示),并解释它的时间复杂度吗?

(一种)

for (int i = 1; i <= n; i+=2) {
    for (int j = 1; j <= n; j++)
        int temp = i * j;
}

(b)中

for(int i = 1; i <= n; i*=2){
    for (int j = 1; j <= n; j++){
        int temp = i * j;
}

根据输入参数n找出行int temp = i*j执行次数。 从该函数中,丢弃除最快上升项以外的所有内容,并从中删除任何线性系数。 您只对该术语的种类感兴趣(常数,对数,线性,二次, n次幂,指数等)。

在(a)中,这将是n 2 在(b)中,它将为n * log(n)。 那就是您的大O复杂性。


作为技术方面的说明,在即时编译之后,在HotSpot JVM上执行的代码的实际时间复杂度将为零,因为编译器将很容易意识到实现该代码没有任何效果。 它将简单地全部删除。

循环的主体不是很有意义,但是让我们忽略一下...

一种)

您进行(n / 2)* n次操作。 如果您知道“ Oh”符号是什么,那就很清楚了。 为O(n ^ 2)。

b)

您大约执行log2(n)* n次运算(您必须将n加倍以增加处理的i数)。 O(nlogn)。

你知道如何获得这个<

暂无
暂无

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

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