运行 次数为常数的循环是否被认为是 Big - Oh(1)?
Is a loop that is running a constant number of times considered Big - Oh(1)?
根据流行的定义,运行固定次数的循环或递归也被视为 O(1)。
例如下面的循环是 O(1)
// Here c is a constant
for (int i = 1; i <= c; i++) {
// some O(1) expressions
}
如果循环变量递增/递减恒定量,则循环的时间复杂度被视为 O(n)。
例如,以下函数的时间复杂度为 O(n)。
// Here c is a positive integer constant
for (int i = 1; i <= n; i += c) {
// some O(1) expressions
}
我对以下示例有点困惑让我们取 c = 5 并且根据 O(1) 定义,下面的代码变为 - O(1)
for(int i = 0; i < 5 ; i++){
cout<<"Hello<<endl";
}
函数 1:
for(int i = 0; i < len(array); i+=2){
if(key == array[i])
cout<<"Element found";
}
函数 2:
for(int i =0;i < len(array) ; i++){
if(key == array[i])
cout<<"Element found";
}
但是当我们比较上面的两个例子时,它们会变成 O(n) 还是第一个函数从定义上看是 O(1)。一个循环究竟是什么 运行 常量时间意味着?
假设 len(array)
就是我们所说的 b
[*],你的两个函数都是 O(n)
.
函数 2 将执行 if
n 次(对数组的每个元素执行一次),显然是 O(n)
.
另一方面,函数 1 将执行 if
n/2
次(数组中每隔一个元素执行一次),导致 运行 次 O(n*1/2)
,并且由于常数因子(在本例中为 1/2
)通常在 O 表示法中被省略,所以您将再次以 O(n)
.
结束
[*] 为了完整起见,如果你的数组是固定大小的,即。 len(array)
是一个常数,而不是两个函数都是 O(1)
.
"Loop running a costant number of times" 表示循环运行的次数从上方受常数限制,即给定的 独立于程序输入的数字 .
在函数 1 和 2 中(除非数组的长度是固定的,或者你可以证明它们永远不会大于特定常数,独立于输入)if
将执行一定次数,具体取决于关于输入的大小,所以时间复杂度不能是 O(1)。
"Time Complexity of a loop is considered as O(n) if the loop variables is incremented / decremented by a constant amount" 是误导性定义
根据流行的定义,运行固定次数的循环或递归也被视为 O(1)。
例如下面的循环是 O(1)
// Here c is a constant
for (int i = 1; i <= c; i++) {
// some O(1) expressions
}
如果循环变量递增/递减恒定量,则循环的时间复杂度被视为 O(n)。
例如,以下函数的时间复杂度为 O(n)。
// Here c is a positive integer constant
for (int i = 1; i <= n; i += c) {
// some O(1) expressions
}
我对以下示例有点困惑让我们取 c = 5 并且根据 O(1) 定义,下面的代码变为 - O(1)
for(int i = 0; i < 5 ; i++){
cout<<"Hello<<endl";
}
函数 1:
for(int i = 0; i < len(array); i+=2){
if(key == array[i])
cout<<"Element found";
}
函数 2:
for(int i =0;i < len(array) ; i++){
if(key == array[i])
cout<<"Element found";
}
但是当我们比较上面的两个例子时,它们会变成 O(n) 还是第一个函数从定义上看是 O(1)。一个循环究竟是什么 运行 常量时间意味着?
假设 len(array)
就是我们所说的 b
[*],你的两个函数都是 O(n)
.
函数 2 将执行 if
n 次(对数组的每个元素执行一次),显然是 O(n)
.
另一方面,函数 1 将执行 if
n/2
次(数组中每隔一个元素执行一次),导致 运行 次 O(n*1/2)
,并且由于常数因子(在本例中为 1/2
)通常在 O 表示法中被省略,所以您将再次以 O(n)
.
[*] 为了完整起见,如果你的数组是固定大小的,即。 len(array)
是一个常数,而不是两个函数都是 O(1)
.
"Loop running a costant number of times" 表示循环运行的次数从上方受常数限制,即给定的 独立于程序输入的数字 .
在函数 1 和 2 中(除非数组的长度是固定的,或者你可以证明它们永远不会大于特定常数,独立于输入)if
将执行一定次数,具体取决于关于输入的大小,所以时间复杂度不能是 O(1)。
"Time Complexity of a loop is considered as O(n) if the loop variables is incremented / decremented by a constant amount" 是误导性定义