Big o 什么是大O形圈?
我在读关于大O符号的书。它说, 循环的big O是循环的迭代次数 循环中的语句数 下面是一段代码片段Big o 什么是大O形圈?,big-o,Big O,我在读关于大O符号的书。它说, 循环的big O是循环的迭代次数 循环中的语句数 下面是一段代码片段 for (int i=0 ;i<n; i++) { cout <<"Hello World"<<endl; cout <<"Hello SO"; } for(inti=0;iO(n)意味着循环的时间复杂度随着元素的数量线性增加 2*n仍然是线性的,所以你说循环的阶数是O(n) 但是,您发布的循环是O(n),因为循环中的指令需要固定的时间
for (int i=0 ;i<n; i++)
{
cout <<"Hello World"<<endl;
cout <<"Hello SO";
}
for(inti=0;iO(n)意味着循环的时间复杂度随着元素的数量线性增加
2*n仍然是线性的,所以你说循环的阶数是O(n)
但是,您发布的循环是O(n),因为循环中的指令需要固定的时间。两倍的常数仍然是一个常数。通常大O
表示法表示函数中的主要操作数
在这个例子中,我们对n个元素进行了过度处理,所以复杂性是O(n)
当然不是O(n^2),因为这些算法的复杂性是二次的,比如冒泡排序,它将输入中的每个元素与所有其他元素进行比较
正如您所记得的,冒泡排序,为了确定插入元素的正确位置,将每个元素与列表中的其他元素n进行比较(冒泡行为)
最多,您可以声称您的算法具有复杂性,因为它为输入中的每个元素打印两个短语,但在big O
中,符号O(n)与O(2n)相等。O(n)用于将循环重新测量为一个数学函数(如n^2,n^m,…)
如果你有这样一个循环
for(int i = 0; i < n; i++) {
// sumfin
}
for(int i =0 ; i< n*2; i++) {
}
for(int i=0;i
循环所采用的最佳描述数学函数是用O(n)计算的(其中n是介于0..无穷大之间的数字)
如果你有这样一个循环
for(int i = 0; i < n; i++) {
// sumfin
}
for(int i =0 ; i< n*2; i++) {
}
for(int i=0;i
表示需要O(n*2);数学函数=n*2
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
}
}
for(int i=0;i
此循环需要O(n^2)时间;数学函数=n^n
通过这种方式,您可以计算出n10、100或1000的循环需要多长时间
通过这种方式,你可以为循环等构建图形。Big-O表示法通过设计(和定义)忽略常数乘法器,所以O(n)和O(2n)是完全相同的。我们通常写O(n),因为它更短更熟悉,但O(2n)的意思相同。如果你检查O()的定义你们会发现(乘数)常数并不重要
循环中要做的工作不是2。有两个语句,每个语句都需要执行两条机器指令,可能是50或78,或者其他,但这与渐近复杂性计算完全无关,因为它们都是常数。它不依赖于n
。它只是O(1)
首先,不要称之为“大O”。这是错误的,也是误导性的。你真正想找到的是,作为n的函数,有多少指令将被渐进地执行。正确地看待O(n)的方法不是作为一个函数,而是作为一组函数。更具体地说:
O(n)是所有函数f(x)的集合,因此存在一些常数M和一些数x_0,其中对于所有x>x_0,f(x)
换句话说,当n变得非常大时,在某个点上,函数的增长(例如,指令数)将被一个具有常数系数的线性函数所限定
根据您对指令的计数方式,该循环可以执行不同数量的指令,但不管是什么,它最多只能迭代n次。因此,指令的数量以O(n)为单位。它是否重复6n或.5n或1000000000N次,或者即使它只执行恒定数量的指令,也无所谓!它仍然在O(n)中的函数类中
为了进一步扩展,类O(n*2)=O(0.1*n)=O(n),并且类O(n)严格包含在类O(n^2)中。因此,该循环也包含在O(2*n)中(因为O(2*n)=O(n)),并且包含在O(n^2)中(但上限并不严格).循环中只有n个迭代,但循环中有2个语句loop@JustAnotherProgrammer请看我的答案,循环中的语句需要恒定的时间,两个常数构成另一个常数。重要的是循环中的迭代次数。No的可能重复No的大O将是O(n)当我们使用时间方程时,循环运行n+1次,因此大的O将是n而不是n2。.复杂性是针对指令进行测量的(可能不是正确的短语,但我不知道更好的短语)如果他想测量STD::CUT的复杂性,他是正确的。如果他想考虑所有的低级函数,那么你是正确的。尽管常量并不象你所指出的那样重要。如果内部循环<代码>(int j=0;j),将大(n ^ 2)改变。