【发布时间】:2016-02-01 18:17:44
【问题描述】:
我所知道的对数据排序的任何数据结构,最多只能进行 O(log n) 查找。
我认为要找到小于给定值的最大值,我们需要首先发现给定值在数据结构中的位置。 (我没有证据表明这是必需的第一步)。
这需要 O(log n) 时间。
从那里,我们需要找到小于该值的最大值。在数组的情况下,我们回顾一个索引 O(1)。在平衡树的情况下,我们遍历通常为 O(log n) 的路径。
无论如何,似乎平均总时间复杂度必须是 O(log n)。
这是正确的,还是我们可以做得更好?
【问题讨论】:
-
我认为是典型的二分查找问题,所以
O(logn) -
值是什么?我们可以假设它们在有限的范围内吗?您是否允许执行预计算(仅当您执行许多此类查询时才有意义)?第二个问题也毫无意义——你总是可以做得更糟:)
-
@IvayloStrandjev 摆脱了最糟糕的部分。
-
@z5h 实际上这是我评论中最重要的部分,只是一种戏弄。你能回答问题吗?
-
可以想象一个数据结构,它对特定值进行 O(1) 查找和 O(log(n)) 搜索 - 例如组合的 hashmap / 树。然后,您可以对最大值进行推测性查找。如果幸运的话,您可以在 O(1) 中完成整个搜索(最好的情况)。