Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “线性”;平滑的;使用查找表的函数_Java_Data Structures - Fatal编程技术网

Java “线性”;平滑的;使用查找表的函数

Java “线性”;平滑的;使用查找表的函数,java,data-structures,Java,Data Structures,如果我想编写一个函数(可能也是一个类),它从不可变的查找表(调用构造函数时固定)返回线性“平滑”数据,如下所示: 例如func(5.0)==0.5 存储查找表的最佳方式是什么 我正在考虑使用两个数组 还有其他更好的方法吗? 计算所需值的最佳方法是什么?(就实时效率而言,不包括准备时间) 我正在考虑对arg上的查找表进行预排序,并使用二进制搜索查找最近的两点 或者我应该建立一个二叉树来简化搜索 或者还有其他更好的方法吗? (小调)这种函数/类/数据结构/算法叫什么?这在计算机科学中

如果我想编写一个函数(可能也是一个类),它从不可变的查找表(调用构造函数时固定)返回线性“平滑”数据,如下所示:

例如
func(5.0)==0.5


  • 存储查找表的最佳方式是什么

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

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


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

    看起来您正在尝试对一组点进行线性插值。我会使用
    java.util.NavigableMap
    。它提供了诸如
    higherEntry(K键)
    lowerEntry(K键)
    等功能,有助于获取相邻点

    你把你的
    (x,y)
    s放入地图。当查询
    f(x_i)
    时,首先检查映射是否包含在映射中,如果包含,则返回它。如果没有,您可以调用
    higherKey(x_i)
    lowerKey(x_i)
    查找相邻的两点。然后使用公式对这两点进行插值(请参见 )


    我还将在不同的类中实现插值逻辑,并将其作为构造函数参数传递给
    函数
    类,以防以后要使用不同的插值方法(即多项式插值)。

    所以它将搜索三次?我不确定
    NavigableMap
    的实现,但如果我实现自己的,并使用一个二进制搜索,我可以在一次迭代中捕获两点或专用值。可能快三倍。。。无论如何,+1表示“不同类中的插值逻辑”。是的,我认为
    TreeMap
    ,如果调用
    higherEntry
    lowerEntry
    ,将搜索两次,但总体运行时间仍然是
    2log n=O(log n)
    。我想这里的问题是,您是想花时间实现自己的数据结构和(修改过的)二进制搜索,还是使用现有的实现,只需付出一点代价。只是好奇,你的数据集有多大?它真的值得开发时间吗?对数运行时的伸缩性相当好。数据集最多为300个点。在大多数情况下,使用现有的实现是一个好主意,但我认为我可能需要某种类型的
    getKeyAt
    getValueAt
    。我还希望该类是不可变的。创建一个不可变的类(即
    InterpolatedFunction
    ),并在内部使用
    NavigableMap
    来管理点。确保映射不会泄漏到编写类中。现在,任何使用
    InterpolatedFunction
    的客户端都将以只读方式访问数据集。
    func()
    的参数精度是多少?可以考虑存储预先计算的值。@ XiaoJia双精度?认真地说,我认为在某些情况下,预先计算该值是可行的,我可以将输入四舍五入为整数值。我可以做另一个实现,但与此不同。我仍然需要另一个实时计算值的实现。