我有一维数组(XYData),例如
$TE = array(
"1"=>"20",
"2"=>"30",
"5"=>"50",
"10"=>"90"
)
我想创建一个内存有效的PHP函数,它对传递的X值进行线性插值并返回相应的Y值。 e.g。
致电function interpolate($TE,9.5)
然后它应该返回86
有没有办法避免数组搜索,因为XYData集可能很长,比如超过100分。
提前谢谢!
答案 0 :(得分:0)
不,你不能避免看你的阵列。为了提高效率,您必须重新构建数据。通过递归查找中间位,然后将其分成两部分来完成此操作。对于你的简短例子,你会得到这个:
$TER = array("2 and lower" => array("1" => "20",
"2" => "30"),
"5 and higher" => array("5" => "50",
"8" => "100"));
没有显示递归,对于如此少量的数据集实际上没有任何意义,但是当数据集变大时,它具有明显的优势。它基本上是一个简单的二叉搜索树。
但我怀疑在这种情况下实施它会有用。我不打算全力以赴,你真的应该拥有100.000项或更多才能使它变得有用。如果没有,那么只需完成数组。