![]() |
1
4
说有东西在里面
一般来说,上面的代码片段的运行时间是
一句话:这完全取决于
现在这个代码在
如果所有的
|
![]() |
2
3
大O描述的是算法速度,而不是实际代码。 当你有一个通用算法时,你不知道变量的约束是什么。 |
![]() |
3
0
大OH符号是将计算复杂度表示为增长函数的一种方式。必须理解的是,它是一个近似值,它只对所涉及的变量的较大值(如n)作出让步。 您绝对正确,单个变量值、常量等都会产生很大的影响。 然而,对于相似(和较大)大小的变量值,一组算法的大Oh表达式将指示它们的相对性能。更典型的是,它是一种方便的实现方式,独立地表示算法的最佳、平均和最坏情况复杂度。 然而,在一天结束时,一旦选择了一个候选算法的短列表(可能基于大的oh符号和其他特性,如空间需求等),那么用一个有代表性的数据集对一个实现进行计时是一条路要走。 |
![]() |
4
0
大O符号只表示算法对给定数量级的数据工作多长时间,以及当您获得更多数据时它将如何“缩放”,O(n)算法如果获得的数据比O(n^2)算法慢(如您在示例中所示)。但是如果你给一个O(n)算法输入2倍多的数据,你应该期望运行时间延长2倍,而使用O(n^2),你应该期望运行时间延长4倍。 |
![]() |
5
0
当N接近无穷大时,你可以为这些例子考虑大O。 因此,在您的场景中,num嫒3>num嫒1*num嫒2是正确的,但是随着这三个数字越来越大,这将不再适用。 如果algorithm1是O(N),algorithm2是O(N^2),并不意味着algorithm1总是比algorithm2好,它只是意味着N有一个阈值(通常称为N0),在这个阈值之后,algorithm1将比algorithm2好。
一个随机的例子是插入排序是O(N^2),其中MergeSort是O(N*log(N)),但是对于非常小的N值,插入排序实际上会更快。一旦N足够大,MergeSort总是更快。Java版本的
Java代码(在Java6中)用于
归根结底,Big O notation是一种分类机制,可以帮助您快速分析和比较算法,其方式独立于计算机硬件,不需要编写、测试和计时各种算法的执行。这是一个简化的符号,所以它永远不会是精确的,正如我刚才给出的例子所示,它非常依赖于数据的大小和范围。 算法的大O符号的一个主要警告是,如果您可以对数据进行假设,则通常可以对算法进行改进。 |
![]() |
6
0
Big-O给出了上限或最坏情况下的增长率。常数被忽略,因为随着n的增长,它们变得越来越不重要(例如,你不说O(3+2n),而只说O(n))。 大欧米茄是一个最好的情况增长率,取决于你知道你的算法将如何使用可能更适合你在某些情况下使用。 如果给定算法的Big-O和Big-Omega是相同的,那么in被称为精确顺序,你可以把它改为大θ。 编辑:为了澄清这一点,最坏情况分析通常更可取,因为您希望能够告诉客户“它总是会表现得很好或更好”,而不是“如果您的数据恰巧是完美的,它会表现得很好!” |
![]() |
Dazcii · 如何找到3个嵌套循环的复杂性 7 年前 |
![]() |
Kodean · Java:循环字符串长度时间复杂性 7 年前 |
![]() |
screeb · 依赖于收敛的算法的大O 7 年前 |
![]() |
f1sh3r0 · 从图中确定渐近增长率 7 年前 |
![]() |
user3487554 · 时间复杂性组合 7 年前 |
|
user6217340 · 大O复杂性 7 年前 |
![]() |
Jawwad Rafiq · 对两个相关循环的复杂性感到困惑? 7 年前 |