我的两种算法的最坏情况运行时间是多少

时间:2019-03-04 23:41:31

标签: python runtime big-o

我很难理解如何计算最坏情况下的运行时间和总体运行时间。由于有一个while循环,因此运行时间必须为n + 1,因为while循环必须再运行1次才能检查情况是否仍然有效?我也一直在网上搜索有关如何进行解释的好方法计算这些运行时间,但我似乎找不到任何好的方法。链接到这样的东西将不胜感激。

view1

3 个答案:

答案 0 :(得分:0)

恒定的因素或增加的值对于big-O运行时间并不重要,因此您将其复杂化了。 O(n)的运行时间为reverse2(线性),O(n**2)的运行时间为reverse1(二次)(因为list.insert(0, x)本身是O(n)的操作,执行了O(n)次)。

Big-O运行时计算涉及的是算法随着输入大小向无穷大增加时的行为方式,较小的因素在这里无关紧要; O(n + 1)O(n)相同(就此而言,O(5n)也是如此;随着n的增加,5的常数倍数与无关更改),O(n**2 + n)仍然只是O(n**2),依此类推。

答案 1 :(得分:0)

由于两个函数的输入列表的任何给定大小的迭代次数都是固定的,因此“最差”的时间复杂度将与“最佳”和“平均值”相同。

void Start() { if (CheckInternets.InternetON) { //do some stuff Debug.Log("OTHER Script Check :: Online! :)"); } else { //do some other stuff Debug.Log("OTHER Script Check :: Offline! :("); } } 中,将项目插入索引为0的列表的操作要花费 O(n),因为它必须将所有项目复制到其后续位置,并加上reverse1循环迭代输入列表大小的次数,while的时间复杂度将为 O(n ^ 2)

reverse1中没有这样的问题,但是,由于reverse2方法的执行成本仅为 O(1),因此其总体时间复杂度为 O(n)

答案 2 :(得分:0)

我将为您提供数学解释,说明为什么恒定时间的额外迭代和操作无关紧要。

这是O(n),因为Big-Oh的定义是对于f(n)∈O(g(n)),存在一些常数 k,使得f(n)<千克(n)。

考虑一种运行时间表示为f(n)= 10000n + 15000000的算法。您可以通过将n分解为因子来简化此算法:f(n)= n(10000 + 15000000 / n)。对于最坏的运行时,您只关心n的超大值的算法性能。因为在这种简化中,您要除以n,所以在第二部分中,当n变得很大时,n的系数将接近10000,因为如果n很大,则15000000 / n接近0。因此,对于n> N(这意味着对于n足够大的值),必须存在一个常数k,使得f(n)

话虽如此,这意味着即使循环n + 1次,您也不必担心运行时的持续差异。唯一重要的部分(对于多项式时间)是代码中n的最高阶。反向算法是O(n)运行时,即使您迭代n + 1000次,它仍然是O(n)运行时。