【发布时间】:2017-04-10 03:44:27
【问题描述】:
给定一个排序数组A 和一个元素x,我需要找到一个算法,如果x 不在A 中,则返回x 在A 或-1 中的索引。
算法的时间复杂度应该是Θ(logd),当d是A中出现在x之前的元素数,或者如果x不在A中,d是之前的元素数x 如果他在A。
二分查找还不够好,因为它的最佳情况是 O(1)。 我想从数组的开头开始,然后开始检查 2 的幂的索引。但我迷路了。
【问题讨论】:
-
二分查找最坏情况是 O(log n)…
-
如果是你想要的
log(size(A)),二分查找就可以了。如果您尝试根据x的位置进行优化,我的直觉是检查2的幂,直到找到大于x的值,然后在上半部分进行二分搜索,但我不是完全清楚你在问什么。 -
@taylorswift 我知道,但我需要
Θ(logd),这意味着最好的情况也是 logd,它在二进制搜索中不正确。 -
@Genadi ,我不确定你是否理解最佳情况和最坏情况复杂性的含义,最坏情况意味着算法可以永远无论输入如何,都需要比 O(log n) 更长的时间来执行此搜索。如果你需要一个 O(log n) 算法,那么每个 O(1) 算法都满足,因为 O(1)
-
根据你的符号,你的意思是说平均时间复杂度应该是
logd。任何算法的最佳情况都可能是O(1)纯属偶然/巧合
标签: arrays algorithm search time-complexity