我有一个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件或更多的东西来让它变得有用。如果没有,那么只需处理数组。