假设我们有一个按升序排序的列表0,10,30,45,60,70。给定一个数字X如何在列表下面的列表中找到它?
我正在寻找最有效的(更快的)算法来做到这一点,当然不必迭代整个列表。
Ex: [0, 10, 30, 45, 60, 70]
Given the number 34, I want to return 30.
Given the number 30, I want to return 30.
Given the number 29, I want to return 10.
等等。
答案 0 :(得分:5)
如果您的列表确实是那么小,最有效的方式
创建一个大小为71的数组,用layout -> add a gadget -> html/javascript
初始化一次,并在不断的查询时间内 - 得到答案。这个想法是因为您可能的查询集非常有限,没有理由不预先计算它并从预先计算的数据中获得结果。
如果你不能预处理,那么阵列就是那么小 - 线性扫描
对于如此小的阵列,使用的开销将是最有效的
对于这样的小型数组,复杂的算法并不值得。任何
添加a的更复杂算法(如二进制搜索)的开销
每次迭代的大量指令对于小数组是无效的。
请注意arr[i] = answer
,这也是预期的时间
(假设均匀分布)将结果用于线性搜索,
但是线性搜索要简单得多,每次迭代都要快得多
而不是二元搜索。
伪代码:
log_2(6) < 3
prev = -infinity
for (x in arr):
if x>arr:
return prev
prev = x
时间运行,需要
遍历的元素明显少于整个列表。
答案 1 :(得分:1)
列表总是排序吗?快速写入或快速执行时间?
看看这个:http://epaperpress.com/sortsearch/download/sortsearch.pdf
答案 2 :(得分:0)
实现Binary Search Algorithm,如果找不到元素,则返回上次访问位置的元素(如果它小于或等于给定数字)或上次访问位置中的元素 - 1(如果最后一个访问位置的元素大于给定数字)。