Performance 在计算函数的大O表示法时,何时以及如何增加时间复杂性
我试图学习如何计算函数的大O符号。我真的不明白我们什么时候应该加上这些“N”数字,什么时候不应该 我将使用伪代码编写一个示例,以便您了解我的想法Performance 在计算函数的大O表示法时,何时以及如何增加时间复杂性,performance,time,time-complexity,big-o,Performance,Time,Time Complexity,Big O,我试图学习如何计算函数的大O符号。我真的不明白我们什么时候应该加上这些“N”数字,什么时候不应该 我将使用伪代码编写一个示例,以便您了解我的想法 define function x(n){ for( i = 1 ; i < n; i++){ for ( j = 1 ; j < n; j++){ // Statement } } } 定义函数x(n){ 对于(i=1;i
define function x(n){
for( i = 1 ; i < n; i++){
for ( j = 1 ; j < n; j++){
// Statement
}
}
}
定义函数x(n){
对于(i=1;i
这里,第一个for循环需要n个时间来执行,我知道,第二个for循环也需要n个时间来执行。因为这是一个嵌套的for循环,所以一个for循环在另一个for循环中,我们乘以值,得到n^2,这意味着大O表示法看起来像这样==>O(n^2)
现在,如果我们有一个像这样彼此靠近的循环,我们将添加n个值。
e、 g:
定义函数x(n){
对于(i=1;i
现在,第一个函数需要n次执行,第二个函数也需要n次执行。
所以,我们加上这些值,得到2n,所以大O表示法看起来像这样==>O(n)
现在,我的问题是:
定义函数x(n){
p=0
对于(i=1;i
因此,这里第一个函数采用log2(n),这对我来说很清楚,我理解了原因。在该函数之后,变量p将为log2(n)。因此,第二个for循环需要log2(p)时间,即log2(log2(n))
现在,我观看了一段youtube视频,视频中说我们不添加值,函数的大O符号仍然是第二个for循环log2(p)所需的时间,因此O(log2(log2(p))。这就是我的问题,为什么我们不把第一个循环所需的时间加上第二个循环所需的时间,就像我们以前做的那样。所以我们会有类似log2(n)+log2(log2(n))?为什么我们要说这个函数的大O表示法是第二个循环所需的时间,我们要忽略最后的第一个循环吗?第一个循环取O(log(n)),因此p大约是log(n) 因此,第二个循环的复杂度为log2(log2(n)),其渐近增长速度比第一个循环慢 如果您被问及整个代码的复杂性,它由第一个循环控制,因此它是log2(n)
您所指的视频只询问第二个循环,即log2(log2(n))。对于第一个错误,您的O(n)乘以f(n)=2n是正确的。忘了吧。视频在这里:在这个视频中,你被问及stmt的时间复杂度,而不是整个代码。因此,您只被问及第二个循环。你只是在视频里漏掉了。
define function x(n){
for ( i = 1 ; i < n ; i++){
// Statement
}
for ( j = 1 ; j < n ; j++){
// Statement
}
}
define function x(n){
p = 0
for( i = 1; i < n ; i *= 2){
p++;
}
for( j = 1 ; j < p ; j *= 2){
// Statement
}
}