我有一個函數,給了我一個數字作爲結果:遞歸二進制搜索
我們使它簡單,我將使用一個發明例如:
function generate($a) {return $a*2;}
//this is just an example, the real generate function is really expensive in terms of speed and resources
我也有一個數組的值,以傳遞給funcion:
$array = array(1,3,4,6,8,9,11);
我想找到$數組的值,即,通過產生(),給出了作爲輸出數最接近5和次要的它。
與逐行掃描的搜索,我會得到這樣的:
$array[0] => 2;
$array[1] => 6;
$array[2] => 8;
etc.
在這種情況下,我希望我的搜索功能,得到輸出作爲本證的號碼1值,傳遞到生成(),即送2作爲輸出,最接近的數量和未成年人5
由於產生()函數是很慢(平均1.5秒)我想要做的是減少使用的希望二進制搜索我功能。
所以基本上我想要做的是:切片$陣列分爲2塊,用生成(),然後切片againg等
我不能同時在遞歸函數和二進制搜索專家(這是我的第一個腳本試圖做到這一點)。
但是我試着寫了一些我在下面粘貼的代碼,但是它不起作用,並且我沒有清楚的想法。
function generate($a) {return $a*2;}
$array = array(1,2,3,4,5,6,7,8,9);
function find($array) {
$first_half = array_slice($array,0,round(count($array)/2,0));
$second_half = array_slice($array,round(count($array)/2,0));
echo "<pre>";
print_r($first_half);
print_r($second_half);
echo "</pre>";
$last = end($first_half);
$last = generate($last);
if($last > 4) {find($first_half);}
else {}
}
find($array);
你能幫幫我嗎?
最好的問候, 喬治
但是,如果沒有,讓作爲結果5的任何元素我應該怎麼辦? 就像我的例子。 – KingBOB
二進制搜索將使您儘可能接近您要查找的元素。既然你願意接受不完美的答案,你可能需要修改你的方法。一旦列表足夠小,也許可以添加一些邏輯來切換到「漸進式」方法? –