查找算法

下列五種查找算法,除順序查找外,其他算法的思路基本相同:

  先對數據按某種方法進行排序,然後使用相應的規則查找。

因此,搞清排序算法纔是關鍵。

一、順序查找

  條件:無序或有序隊列。

  原理:按順序比較每個元素,直到找到關鍵字爲止。

  時間複雜度:O(n)

二、二分查找(折半查找)

  條件:有序數組

  原理:查找過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;

     如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。

     如果在某一步驟數組爲空,則代表找不到。

     這種搜索算法每一次比較都使搜索範圍縮小一半。

  時間複雜度:O(logn)

三、二叉排序樹查找

  條件:先創建二叉排序樹:

      1. 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

      2. 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

      3. 它的左、右子樹也分別爲二叉排序樹。

  原理:

    在二叉查找樹b中查找x的過程爲:

    1. 若b是空樹,則搜索失敗,否則:

    2. 若x等於b的根節點的數據域之值,則查找成功;否則:

    3. 若x小於b的根節點的數據域之值,則搜索左子樹;否則:

    4. 查找右子樹。

  時間複雜度:O(\log_2(n))

四、哈希表法(散列表)

  條件:先創建哈希表(散列表)

  原理:根據鍵值方式(Key value)進行查找,通過散列函數,定位數據元素。

  時間複雜度:幾乎是O(1),取決於產生衝突的多少。

五、分塊查找

  原理:將n個數據元素"按塊有序"劃分爲m塊(m ≤ n)。

     每一塊中的結點不必有序,但塊與塊之間必須"按塊有序";即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;

     而第2塊中任一元素又都必須小於第3塊中的任一元素,……。

  然後使用二分查找及順序查找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章