一尘不染

使用二进制搜索查找多个条目

algorithm

我使用标准的 二进制搜索 来快速返回 排序列表中 的单个对象(关于可排序属性)。

现在,我需要修改搜索,以便返回 所有 匹配的列表条目。我应该如何最好地做到这一点?


阅读 168

收藏
2020-07-28

共1个答案

一尘不染

好吧,当列表排序时,您感兴趣的所有条目都是 连续的 。这意味着您需要查找与找到的项目相同的第一项,并从二进制搜索生成的索引中向后看。和关于最后一项相同。

您可以简单地从找到的索引后退,但是如果有很多项目等于找到的项,则这种方法的求解速度可能与O(n)一样慢。因此,您最好使用 指数搜索
:当您找到更多相等项时,将跳转次数增加一倍。这样,您的整个搜索仍然是O(log n)。

2020-07-28