普通查詢演算法和二分查詢演算法

2021-07-22 13:34:26 字數 1172 閱讀 5127

(1) 普通的資料查詢

設想有乙個1m的資料,我們如何在裡面找到我們想要的那個資料。此時資料本身沒有特徵,所以我們需要的那個資料可能出現在陣列的各個位置,可能在資料的開頭位置,也可能在資料的結束位置。這種性質要求我們必須對資料進行遍歷之後才能獲取到對應的資料。

<?php

function find($arr,$value)

for ($i=0; $i < $len ; $i++)

} return -1;

}$list = array('23','38','22','45','23','67','31','15','41');

$index = find($list,41);

var_dump($index);

分析:

由於我們不清楚這個資料判斷究竟需要多少次。但是,我們知道,這樣乙個資料查詢最少需要1次,那麼最多需要n次,平均下來可以看成是(1+n)/2,差不多是n的一半。我們把這種比較次數和n成正比的演算法複雜度記為o(n)。

(2)二分查詢。上面的資料沒有任何特徵,這導致我們的資料排列地雜亂無章。試想一下,如果資料排列地非常整齊,那結果會是什麼樣的呢?那麼,對乙個有序的陣列,我們應該怎麼查詢呢?二分法就是最好的方法。

<?php

function binary_find($arr,$value)

$start = 0;

$end = $len-1;

while ($start<=$end) elseif ($value>$arr[$middle]) else

} return -1;//沒找到

}$list= array('1','2','5','7','8','9','10','13','15');

$index = binary_find($list,7);

var_dump($index);

上面我們說到普通的資料查詢演算法複雜度是o(n)。那麼我們可以用上面一樣的方法判斷一下演算法複雜度。這種方法最少是1次,那麼最多需要多少次呢?我們發現最多需要log(n+1)/log(2)。大家可以找個例子自己算一下,比如說7個資料,我們發現最多3次;如果是15個資料呢,那麼最多4次;以此類推,詳細的論證方法可以在《演算法導論》、《計算機程式設計藝術》中找到。明顯,這種資料查詢的效率要比前面的查詢方法高很多。

查詢演算法 二分查詢

利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...

查詢演算法 二分查詢

二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...

查詢演算法 二分查詢

二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下 例 有乙個數列 12,23,45,56,67,89 請使用二分查詢找到56的位置 解 首先mid 0 5 2...