如果我想编写一个函数(可能也是一个类),它从一个不可变的查找表(在调用构造函数时修复)返回线性“平滑”的数据,如下所示:
例如func(5.0) == 0.5
。
存储查找表的最佳方法是什么?
计算所需数值的最佳方法是什么? (在实时效率方面,不包括准备时间)
arg
上对查找表进行预排序,并使用二进制搜索来查找最近的两个点。(次要)人们会称这种函数/类/数据结构/算法是什么?计算机科学中是否有正式名称?
我想我可能需要写自己的课程。该类充其量应该是不可变的,因为在初始化之后不需要更改它,并且可能多个线程将使用它。我可能还需要通过索引获取键和值。
答案 0 :(得分:6)
看起来你正试图线性插值一组点。我会使用java.util.NavigableMap
。它提供higherEntry(K key)
和lowerEntry(K key)
等功能,有助于获取相邻点。
您将(x,y)
s放入地图。查询f(x_i)
时,首先要检查映射中是否包含映射,如果是,则返回映射。如果不是,您可以拨打higherKey(x_i)
和lowerKey(x_i)
来查找相邻的两个点。然后使用公式来插入这两个点(参见
Wikipedia's Linear Interpolation Page)。
我还将在不同的类中实现插值逻辑,并将其作为构造函数参数传递给function
类,以防您以后想要使用不同的插值方法(即多项式插值)。 p>