内存有效的PHP线性插值


Memory effective Linear interpolation with PHP

我有一个1D数组(XYData),例如

$TE = array(
      "1"=>"20",
      "2"=>"30",
      "5"=>"50",
      "10"=>"90"
   )

我想创建一个内存有效的PHP函数,对传递的X值进行线性插值,并返回相应的Y值。例如

呼叫function interpolate($TE,9.5)那么它应该返回86

有没有办法避免数组搜索,因为XYData集可能很长,比如说超过100个点。

提前谢谢!

不,您无法避免查看您的数组。为了提高效率,你必须重组你的数据。要做到这一点,可以递归地查找中间部分,然后在这一点上将其拆分为两部分。举个简短的例子,你会得到:

$TER = array("2 and lower"  => array("1" => "20", 
                                     "2" => "30"),
             "5 and higher" => array("5" => "50",
                                     "8" => "100")); 

没有显示递归,对于这么小的数据集来说,这真的没有任何意义,但当数据集变大时,有明显的优势。它基本上是一个简单的二进制搜索树。

但我怀疑在这种情况下实施它是否有用。我不会把它全部计算出来,你真的应该有100000件或更多的东西来让它变得有用。如果没有,那么只需处理数组。