内存有效使用PHP进行线性插值

时间:2014-08-30 13:55:06

标签: php arrays

我有一维数组(XYData),例如

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

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

致电function interpolate($TE,9.5) 然后它应该返回86

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

不,你不能避免看你的阵列。为了提高效率,您必须重新构建数据。通过递归查找中间位,然后将其分成两部分来完成此操作。对于你的简短例子,你会得到这个:

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

没有显示递归,对于如此少量的数据集实际上没有任何意义,但是当数据集变大时,它具有明显的优势。它基本上是一个简单的二叉搜索树。

但我怀疑在这种情况下实施它会有用。我不打算全力以赴,你真的应该拥有100.000项或更多才能使它变得有用。如果没有,那么只需完成数组。