我只是想知道this algorithm的效率(O(n))是多少:
据我所知,最坏的情况是O(n)= n(当k是先前置换的第一个元素时),最佳情况O(n)= 1(当k是先前置换的最后一个元素时)。
我可以说O(n)= n / 2?
答案 0 :(得分:2)
O(n) = n/2
毫无意义。让f(n) = n
成为算法的运行时间。然后正确的说法就是f(n)
位于O(n)
。 O(n)
是一组函数,在n
中最多渐近线性。
您的优化会产生预期的运行时间g(n) = n/2
。 g(n)
也位于O(n)
。事实上O(n) = O(n/2)
所以你节省一半的时间不会改变渐近的复杂性。
答案 1 :(得分:1)
算法中的所有步骤都渐近O(n)
。
您的平均值不正确。仅仅因为最好的情况是O(1)而最坏的情况是O(n),你不能说算法需要O(n)= n / 2。 Big O表示法仅用于算法的上限。
因此,无论最佳情况如何,算法仍为O(n)
。
答案 2 :(得分:0)
没有O(n)= n / 2。
当你进行O(n)计算时,你只是想找到函数依赖,你不关心系数。所以没有O(n)= n / 2,就像没有O(n)= 5n
答案 3 :(得分:0)
渐近地,O(n)与O(n / 2)相同。在任何情况下,都为n中的每一个执行算法!排列,所以顺序远大于你的估计(大约为n!)。