【发布时间】:2012-01-05 22:48:18
【问题描述】:
可能重复:
Fast Algorithm to Quickly Find the Range a Number Belongs to in a Set of Ranges?
给定一个不重叠且已排序的数字范围列表(rangeList)和一个数字,编写一个有效的算法首先查找该数字是否存在于(某个范围内)rangeList中,如果确实存在,则返回正确的范围。
例如 rangeList = [(-1, 200), (300, 2000), (2011, 2300)]
查询 1: 1000 -> (True, (300, 2000) ) 因为 1000 介于 300 和 2000 之间。
查询 2: 250 -> (False, (None, None) ) 因为没有 250 在列表的任何范围内都不存在。
我想出的最佳算法是使用二分搜索 log N。这感觉像是一个非常常见的问题,尤其是对于基于经度/纬度的搜索。有什么想法可以使它比 log N 更好吗?
【问题讨论】:
-
好问题。我想不出任何不涉及硬编码哈希函数的更好方法。
-
谢谢。你能详细说明硬编码的哈希吗?你是说记忆吗?
-
有点。我会发布答案...
-
当然,我只是在发布我的答案后才看到。 xD 好吧,无论如何,我会留给您阅读,同时我会检查其他问题...
标签: algorithm data-structures computer-science