軟考中級(軟件設計師)--數據結構基礎之查找

一、查找:

給定一個值K,在含有N個記錄的文件中進行搜索,尋找一個關鍵字等於K的記錄,如找到則輸出該記錄,否則輸出查找不成功的信息。

二、查找算法的優劣:

用比較次數的平均值來評估算法的優劣,稱爲平均查找長度ASL。

三、靜態查找表:

  • 順序查找(線性查找)
  • 折半查找(二分或對分查找)
  • 分塊查找(索引順序查找)

四、順序查找:用逐一比較的辦法順序查找關鍵字

性能分析:平均查找長度爲:(N+1)/2,時間效率O(n)
優點:算法簡單、適用面廣,對查找表的結構沒有要求,無論記錄是否按關鍵字有序排列均可使用。
缺點:在N值較大時,平均查找長度較大,查找效率較低。

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

先給數據排序,形成有序表,把待查數據值與查找範圍的中間元素值進行比較,會有四種情況出現。

  1. 待查找數值與中間元素值相等,返回中間元素值的索引。
  2. 待查找數值比中間元素值小,則以整個查找範圍的前半部分作爲新的查找範圍,執行第一種,直到找到相等的值。
  3. 待查找的數值比中間元素值大,則以整個查找範圍的後半部分作爲新的查找範圍,執行第一種,直到找到相等的值。
  4. 如果最後找不到相等的值,則返回錯誤提示信息。

平均查找長度:(n+1)/n log2(N+1)-1=log2(n-1)-1
折半查找比順序查找的效率要高,但它 要求查找表經行順序存儲並且按關鍵字有序列表,因此對錶經行元素的插入和刪除時,需要移動大量的元素,所以折半查找適用於表不易變動,且又經常經行查找的情況。

六、分塊查找:

又稱索引順序查找,是對順序查找方法的一種改進,其性能介於順序查找和折半查找之間。
在分塊查找過程中,首先把表分成若干塊,每一塊中的關鍵字不一定有序,但有塊之間是有序的,即後一塊中所有記錄的關鍵字均大於前一塊中最大的關鍵字,還建立了一個索引表,索引表按關鍵字有序。

七、查找步驟分兩步經行:

  1. 對索引表使用折半查找法(因爲索引表是有序表)
  2. 確定了待查關鍵字所在的子表後,在子表內採用順序查找法(因爲各子表內部是無序表)

八、哈希表

根據關鍵碼值而直接經行訪問的數據結構。由關鍵碼的值決定數據的這個存儲地址,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫坐散列表。
優點:查找速度極快(O(1)),查找效率與元素個數N無關。

九、哈希查找方法中,衝突(數值數量大於哈希值數量)是不可能避免的,只能可能減少。

  1. 構造好的哈希函數
    所選函數儘可能簡單、以便提高轉換速度。
    所選函數對關鍵碼計算除的地址,應在哈希地址內集中並大致均勻分佈,以減少空間浪費。
  2. 制定一個好的解決衝突的方案
    查找時,如果哈希函數計算出的地址查不到關鍵碼,則應當一句解決衝突的規則,有規律地查詢其它相關單元。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章