[英]How to calculate big-Oh time complexity in terms of n in each case?
[英]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.