algorithm - 对已排序的多个项目进行二进制搜索

标签 algorithm binary-search

假设我有一个长排序列表 L={1, 2,.., 999, 1000} 和一个短排序列表 S={22, 255, 623, 732, 876}。

在 L 中,我想搜索 S 的每个元素。最有效的方法是什么?

目前我想到的方法是:

1. Binary search for 22. Record the lower bound=23
2. Binary search for 876. Record the upper bound=875
3. Binary search for 255 in the range [lower bound=23, upper bound=875].
4. Set lower bound=256, and go on..

这是最有效的方法吗?有没有比这种方法收敛速度更快的方法呢?

谢谢!

最佳答案

一些建议:

1)首先,尝试找到排序后的短列表的中间元素(示例中为623),结果为index

2) 将短列表分为下半部分(都是小于中间元素的元素)和上半部分(都是大于中间元素的元素)。

3) 对于下半部分,我们从长列表的0开始搜索到index,对于上半部分,我们从index开始搜索+ 1n (n 是长列表的长度)

4) 对两半递归地执行步骤 1。

关于algorithm - 对已排序的多个项目进行二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416113/

相关文章:

C# 快速排除排序列表的方法

python - 计算包含某些项目的列表集的总唯一排列的算法

python - 0/1 变量很少的背包 : which algorithm?

java - 尝试对对象数组进行二分搜索 [比较器]

c++ - 我的二进制搜索算法有什么问题?

java - 如何在递归二分搜索中显示新的中间位置

javascript - 对象和属性的随机数组

ruby - 最好的基于(单词或字符)的差异算法是什么?

algorithm - prims 和 boruvka 算法的区别

c++ - 二进制搜索 - 代码编译和运行后不显示输出