使用查找表线性“平滑”功能

时间:2013-01-14 15:18:34

标签: java data-structures

如果我想编写一个函数(可能也是一个类),它从一个不可变的查找表(在调用构造函数时修复)返回线性“平滑”的数据,如下所示: An example of lookup table and results

例如func(5.0) == 0.5


  1. 存储查找表的最佳方法是什么?

    • 我正在考虑使用两个数组。
    • 还有其他更好的方法吗?
  2. 计算所需数值的最佳方法是什么? (在实时效率方面,不包括准备时间)

    • 我正在考虑在arg上对查找表进行预排序,并使用二进制搜索来查找最近的两个点。
    • 或者我应该构建一个二叉树来简化搜索?
    • 或者还有其他更好的方法吗?
  3. (次要)人们会称这种函数/类/数据结构/算法是什么?计算机科学中是否有正式名称?

  4. 我想我可能需要写自己的课程。该类充其量应该是不可变的,因为在初始化之后不需要更改它,并且可能多个线程将使用它。我可能还需要通过索引获取键和值。

1 个答案:

答案 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>