如何计算Big-O表示法中的平均渐近运行时间
How to calculate average asymptotic running time in Big-O notation?
试图理解渐近符号,我理解它是用来描述算法性能的。我说有最坏、最好和平均的情况,这是正确的吗?例如,对于下面的代码,Big-O表示法中的平均渐近运行时间是多少?
for (int i = 0; i < size; i++)
{
printf("%dn", i);
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
printf("%dn", i + j);
}
}
它会是O(n^2(吗?
我说有最坏、最好和平均的情况是正确的吗?
通常只有最坏情况和平均情况才感兴趣,但如果您愿意,也可以考虑最佳情况。
它会是O(n^2(吗?
您所拥有的是典型的O(n^2)
复杂性。最好的、一般的和最坏的,它们都适用于您的特定情况。只有当您可以提前中断循环,或者有条件地跳过整个循环时,它们才不一样。
编辑:当平均和最佳情况复杂度不同时的示例:
for(var i = 0; i < len; ++i)
if(arr[i] == needle)
return needle;
如果元素立即被找到,这充其量是一个常数运算,即O(1(,最坏的情况是O(n(线性运算——特别是线性搜索。
我说有最坏、最好和平均的情况是正确的吗?
事例只是所有可能输入的某个子集,可能是具有所有可能输入大小的一个输入的子集。因此,例如,排序算法的情况可能是所有可能的输入数组集合的某个子集,也可能只是那些每个输入大小只有一个元素的子集。使用这个定义,最坏的情况将是输入的子集,使得它们使得算法针对给定的输入大小执行最多的指令;最好的情况是在每个输入大小下需要最少步数的一组输入;平均情况就像在每个大小的所有可能实例上运行类型的预期值(根据上面的简单定义,平均"情况"根本不是真正的情况,更像是假设情况(。
对于每一种情况,我们都可以将一个渐近界——上界、下界或两者都联系起来。通常感兴趣的是最坏情况的上限,有时是最好情况的下限。但说最好情况下的上界或最坏情况下的下界并没有错。
您发布的代码所做的工作量总是与size
值的平方成正比。从这个意义上说,它是O(size^2)
。也是size^2
的Omega和Theta。如果算法得到的输入的比特大小与大小成正比,那么这就是真正的复杂性。如果该算法获得size
的值作为输入(使用log(size)
比特表示(,则复杂度实际上是指数的——根据size
的复杂度可以被称为伪多项式。
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- C 获得运行时间和内存使用量
- C DO插座关闭自己的运行时间
- 此代码中运行时间错误的原因是什么