我想问一个关于算法的问题。
假设有几个段。(段号不固定,可能很长)
例如:
segment data range (data range not fixed)
**A 0~10**
**B 11~45**
**C 46~49**
**D 50~100**
**E 101~105**
**F 106~128**
如果输入→99
我会从我的程序中获得输出'D'。
我将把这个示例实现放在java中。
那么,你有什么方法或算法可以让程序执行时间更快吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用ConcurrentSkipListMap并添加以映射范围和值
答案 2 :(得分:0)
假设您的数据范围都已排序且不重叠,那么您可以尝试使用二进制搜索样式方法。
您可以将每个范围的起始值放入数组中:
[0, 11, 46, 50, 101, 106]
正确的起始值(如果存在)将具有以下两个属性:
在这种情况下搜索90是微不足道的,因为我们会立即点击它。让我们说我们想找到20.我们将采取以下步骤:
[0, 11, 46, 50, 101, 106]
Choose 50; fails because 50 > 20; go left
[0, 11, 46]
Choose 11; succeeds because 20 > 11 and 20 < 46
因此,这将产生范围11-45
,我们需要再检查一次以确保20在此范围内。在这种情况下,它是,但它不是必须的。上面描述的二分搜索方法只能找到最合适的范围,它不一定要包含实际的数字。
答案 3 :(得分:0)
你可以使用Interval Tree - 我前段时间发布了一个实现here。
间隔树也可以处理重叠范围。