【发布时间】:2015-05-13 16:21:34
【问题描述】:
假设在大约长度为 n/2 的子数组上调用二进制搜索,并且在一个级别上最多有三个比较,我想出T(n) = T(n/2) + 3 作为递归关系。
但是:当我递归调用 binarySearch 时,切片的成本不是与 n 成正比吗?因此,解决方案不是T(n) = nlogn 而不是logn?
这让我很困惑。我检查了 Python 的成本模型,并且(正如预期的那样)切片的成本与 n 成正比。
【问题讨论】:
-
您可以在问题中包含代码吗?我认为您是说它执行 O(n) 操作(对数组的一半进行切片),因此您的递归关系是错误的(因此您的二进制搜索是一个糟糕的实现)。
-
如果你物理地“切片”并复制子数组,那么是的..但通常当我们进行二进制搜索时,没有元素被物理移动......请参阅@AbcAeffchen 的答案以获得更好的解释
标签: big-o time-complexity complexity-theory binary-search