【发布时间】:2012-01-01 08:30:02
【问题描述】:
假设,我有一个未排序的重叠ranges 数组。每个range 只是一对整数begin 和end。现在我想找出给定的key 是否至少属于ranges 之一。可能,我也必须知道它所属的ranges。
我们可以假设ranges 数组需要大约 1M 并且适合内存。我正在寻找一种简单的算法,它只使用标准 JDK 集合,没有任何 3d 方库和特殊数据结构,但运行速度相当快。
你有什么建议?
【问题讨论】:
-
范围是排序的,还是完全不受约束的?
-
我假设线性搜索不会削减它?可能有非常聪明的方法可以做到这一点,但它们可能会违反您的其他要求。我们有多少范围和键的任何迹象?
-
我不清楚这个问题,但听起来你需要一个 {key, range} 对的哈希表。
-
你的问题有点混乱。对于属于范围的键,它必须在开始和结束之间吗?你想找到键所属的每个范围吗? “范围可能需要〜1M”。您的意思是范围的集合将是大约 1M 不同的范围?
-
@ben:问题似乎更像是首先如何为每个
key找到range。找到后当然可以使用哈希表来存储它,但我不明白如果不先解决 OP 的问题,如何构造这样的哈希表。
标签: java algorithm search data-structures