java - 以最小的复杂性将值匹配到最接近的值范围

标签 java search time range

我遇到了一个需要帮助的问题 - 假设我有一些由键(整数)和值(也是整数)组成的数据集。我需要能够,给定某个键的值,找到它所属的最小键范围(即找到最接近的较大和较小的键),然后通过插值返回匹配值。我想知道哪种方式可以让我在最快的时间内做到这一点(空间复杂性不那么重要)。此外,删除是无关紧要的,所有值都是在启动时给出的(我们可以假设启动后不会再添加任何值)。我的重点是搜索时间,而不是插入时间。

最基本的解决方案是保留一个排序的键数组并对其使用二分搜索 - 直到找到输入键或找到两个大于和小于输入键的相邻元素。此选项将花费 O(log n) 进行插入和搜索。我想知道是否还有更好的。

谢谢!

最佳答案

我会使用 NavigableMap,例如 TreeMap。

NavigableMap<Integer, Integer> map = new TreeMap<>();
map.put(1, 10);
map.put(0, -10);
map.put(5, 25);
map.put(3, 20);

// find the value below.
int key = 2;
Map.Entry<Integer, Integer> entry1 = map.floorEntry(key);
Map.Entry<Integer, Integer> entry2 = map.ceilingEntry(key);
System.out.println(key + " is between " + entry1 + " and " + entry2);

打印

2 is between 1=10 and 3=20

插入、更新、查找和删除的时间复杂度为O(log N)

关于java - 以最小的复杂性将值匹配到最接近的值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074713/

相关文章:

javascript - 如何将unix时间戳和 "9:00 am"组合成一个新的时间戳?

java - 使用自定义适配器按产品名称对 ListView 进行排序?

python-3.x - 如何在列表中找到所有不相等的 bool 元素的条纹?

Java访问互联网搜索?

linux - 在linux中搜索另一个文件的另一列中的一列

java - Java中没有时间戳的creationTime

date - 如何将月份或日期添加到当前/选择的日期 Kotlin

java - 即使编写代码后,JLabel 也不会变得不透明?

java - Weka 打印稀疏 arff 文件

java - 如何使 javadoc 继承适用于外部 API? (使用 Maven2)