【发布时间】:2018-12-05 06:06:55
【问题描述】:
如果我有一个长长的排序数字列表,并且我想找到大于某个值的最小元素的索引,有没有比在整个列表上使用二分查找更有效的方法?
例如:
import random
c = 0
x = [0 for x in range(50000)]
for n in range(50000):
c += random.randint(1,100)
x[n] = c
找到小于某个数字的 x 中最大元素的位置的最有效方法是什么,z
我知道你已经可以做到了:
import bisect
idx = bisect.bisect(x, z)
但是假设这会被执行很多次,还有比二分查找更有效的方法吗?由于列表的范围很大,创建一个包含所有可能整数的字典会占用太多内存。是否可以创建一个较小的列表,例如每 5000 个数字,并使用它来加快查找大列表的特定部分?
【问题讨论】:
-
在不牺牲内存或应用额外约束的情况下,您可能无能为力来改进理论上的运行时功能。可以出现在列表中的值的预期范围是多少?它的预期尺寸是多少?你要搜索多少个值,在第一次搜索之前你知道所有的值吗?本文详细介绍了一种多键二分搜索的方法,您可能想看看:researchgate.net/publication/…
标签: python python-3.x list binary-search