Algorithm 一个循环运行的次数是固定的,这算是大循环吗?哦(1)?

Algorithm 一个循环运行的次数是固定的,这算是大循环吗?哦(1)?,algorithm,loops,big-o,Algorithm,Loops,Big O,从一个流行的定义来看,一个循环或递归运行一个恒定的次数也被认为是O(1) 例如,下面的循环是O(1) //这里c是一个常量 对于(inti=1;i假设len(array)是我们所说的[*]的b,两个函数都是O(n) 函数2将执行ifn次(数组的每个元素一次),使其明显O(n) 另一方面,函数1将执行,如果n/2次(对于数组中的每个其他元素一次),导致运行时间为O(n*1/2),并且由于常量因子(1/2在本例中)通常在O表示法中被省略,因此您将再次以O(n)结束 [*]为了完整性起见,如果数组的

从一个流行的定义来看,一个循环或递归运行一个恒定的次数也被认为是O(1)

例如,下面的循环是O(1)

//这里c是一个常量
对于(inti=1;i假设
len(array)
是我们所说的[*]的
b
,两个函数都是
O(n)

函数2将执行
if
n次(数组的每个元素一次),使其明显
O(n)

另一方面,函数1将执行
,如果
n/2
次(对于数组中的每个其他元素一次),导致运行时间为
O(n*1/2)
,并且由于常量因子(
1/2
在本例中)通常在O表示法中被省略,因此您将再次以
O(n)
结束


[*]为了完整性起见,如果数组的大小是固定的,即
len(数组)
是一个常数,那么这两个函数都是
O(1)
假设
len(数组)
是我们所说的
b
,那么这两个函数都是
O(n)

函数2将执行
if
n次(数组的每个元素一次),使其明显
O(n)

另一方面,函数1将执行
,如果
n/2
次(对于数组中的每个其他元素一次),导致运行时间为
O(n*1/2)
,并且由于常量因子(
1/2
在本例中)通常在O表示法中被省略,因此您将再次以
O(n)
结束


[*]为完整起见,如果数组大小固定,即
len(array)
为常数,则这两个函数都将
O(1)

“循环运行了若干次”表示循环运行的次数受一个常数的限制,即给定的次数与程序的输入无关。 在函数1和函数2中(除非数组的长度是固定的,或者你可以证明它们永远不会大于一个特定常数,与输入无关),
if
将执行一段时间,这取决于输入的大小,因此时间复杂度不能是O(1)。 “如果循环变量以常量递增/递减,则循环的时间复杂度被视为O(n)”,这是一个误导性的定义

“循环运行的次数是共价的”表示循环运行的次数受一个常数的限制,即给定的次数与程序的输入无关。 在函数1和函数2中(除非数组的长度是固定的,或者你可以证明它们永远不会大于一个特定常数,与输入无关),
if
将执行一段时间,这取决于输入的大小,因此时间复杂度不能是O(1)。
“如果循环变量以常量递增/递减,则循环的时间复杂度被视为O(n)”,这是一个误导性的定义

单个循环是
O(1)
?否。您的第一个代码片段是
O(c)
@FirstStep,但
c
是一个常量definition@FirstStep它也可以重写为
O(c*1)
。由于我们不关心大O表示法中的常数因子,它相当于
O(1)
@第一步:如果
c
是常数,循环就是
O(1)
@SaiKiran,O(n/2)=O(n),因为我们不关心系数。我们通常也不写系数(例如1/2)。单个循环就是
O(1)
?不是。你的第一个代码片段是
O(c)
@FirstStep,但是
c
是一个常量definition@FirstStep它也可以重写为
O(c*1)
。由于我们不关心big-O符号中的常数因子,它相当于
O(1)
@FirstStep:如果
c
是常数,则循环是
O(1)
@SaiKiran,O(n/2)=O(n),因为我们不关心系数。我们通常也不写系数(例如1/2)。(
循环运行一个
常量
次数
;独立的长度(但是,“除非绝对必要,否则避免琐碎的编辑”))(
循环运行一个
常量
次数
;独立的长度(但是,“除非绝对必要,否则避免琐碎的编辑”))
// Here c is a constant   
for (int i = 1; i <= c; i++) {  
    // some O(1) expressions
}
// Here c is a positive integer constant   
for (int i = 1; i <= n; i += c) {  
    // some O(1) expressions
}
for(int i = 0; i < 5 ; i++){
    cout<<"Hello<<endl";
}
for(int i = 0; i < len(array); i+=2){
    if(key == array[i])
         cout<<"Element found";
}
for(int i =0;i < len(array) ; i++){
    if(key == array[i])
        cout<<"Element found";
}