[英]time complexity of sorting inside while loop
我正在尝试使用以下伪代码了解算法的时间复杂度:
让 nums 有 ArrayList 的数字
sort(nums)
while(nums.size() > 1) {
// remove two elements
nums.remove(0);
nums.remove(0);
nums.add(some_number);
sort(nums);
}
sort(nums)
是(N)Log(N)
。 nums.remove(0)
是O(N)
nums.add()
是O(1)
现在这个算法的时间复杂度是多少。
最终的复杂度是O(n² log n)
因为你做了n
次操作O(n log n)
。
请记住,估计复杂度( O(...)
)与确定操作总数不同(通常时间 function T(...)
由总操作给出),它们是两个不同的概念。 一个很好的介绍可能是算法分析
因此, O(...)
表示法是一个上限,但T(...)
是实际步骤。
您可以尝试精确计算T
function,或者您可以通过改进O
降低上限 go ,但它们始终是不同的函数,因为O
适用于所有可能条目的最坏情况。
在您的代码中,对于排序 function,我们未知T
,只有它们的上限为O(n log n)
,然后:
T(n) ≤ O(n log n) + T(3) + O((n - 1) log (n - 1)) + T(3) + O((n - 2) log (n - 2) + ...
T(n) ≤ O(n log n) + n T(3) + n O(n log n)
^^^^^^^^^
在这里,我们无法准确定义T
用于对n-1
, n-2
,...进行排序操作,这就是为所有这些操作建立更高级别O(n log n)
的原因。 然后:
T(n) ≤ O(n log n) + n T(3) + n O(n log n)
T(n) ≤ O(n log n) + O(n) + O(n² log n)
T(n) ≤ O(n² log n)
在第二个表达式中,我们有固定数量的上界,在这种情况下,上界将是上界的最高值。
(删除、删除和添加是T(3)
,忽略goto
和比较)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.