O(n)
的运行时间,但我对此持怀疑态度。有人能解释一下为什么它是O(n)
吗?在普通的快速排序中,运行时间为
O(n log n)
。每次我们将分支分成两个分支(大于枢轴和小于枢轴),我们需要在两个分支中继续处理,而快速选择只需要处理一个分支。我完全理解这些点。然而,如果你考虑二分搜索算法,在我们选择中间元素之后,我们也只搜索分支的一个侧面。那么这个算法是O(1)
吗?不是的,当然,二分搜索算法仍然是O(log N)
而不是O(1)
。这也与在二叉搜索树中搜索元素相同。我们只搜索一个侧面,但我们仍然考虑O(log n)
而不是O(1)
。
有人能解释一下为什么在快速选择中,如果我们继续在枢轴的一个侧面搜索,它被认为是O(1)
而不是O(log n)
吗?我认为该算法的时间复杂度为O(n log n)
,其中O(N)
用于分区,O(log n)
用于继续查找的次数。
O(N) + O(log N) = O(N)
。当你做一件事然后再做另一件事时,你需要将复杂度的数量级相加,而不是相乘。 - David Schwartz