如何找到排序列表子集的边界?

时间:2011-01-05 23:50:20

标签: algorithm search

我有以下困境:我有一个字符串列表,我想找到以某个前缀开头的字符串集。列表是排序的,所以天真的解决方案是:

对集合的前缀执行二进制搜索,当您找到以前缀开头的元素时,线性向上遍历,直到您到达子集的顶部。

然而,这是在线性时间内运行的,我想知道是否有人可以提出更有效的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

您可以对顶部元素执行类似的二进制搜索,但您应该查找的字符串是以严格大于相关前缀的前缀开头的第一个字符串。这也需要O(lg n)时间。

答案 1 :(得分:1)

对顶部进行二进制搜索,并对底部进行二进制搜索。一旦找到第一个匹配,您就会知道顶部位于该点之上,而底部位于下方(或者在两种情况下都是这一点)。一旦你有了顶部和底部,你就有了解决方案。

答案 2 :(得分:0)

一旦在集合中找到一个元素,只需保持二进制搜索,直到找到端点。