各種查詢演算法分析

2021-07-31 06:02:34 字數 2426 閱讀 7592

就是根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的資料元素(或記錄)。

表示只作查詢操作的查詢表,其主要操作有:

在查詢過程中同時插入查詢表中不存在的資料元素,或者從查詢表中刪除已經存在的某個資料元素。其操作也是兩個:

為了提高查詢效率,查詢所基於的資料結構是集合,集合中的記錄之間沒有本質關係。為了提高效能,要在儲存時將查詢集合組織成表、樹結構。

如:靜態查詢表比較適合線性表,動態查詢比較適合二叉排序樹。

又叫線性查詢,是最基本的查詢技術,其查詢過程是:從表中第乙個(或最後乙個)開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄;如果直到最後乙個(或者第乙個)記錄,其關鍵字都與給定值不相等,則表中沒有所查的記錄,查詢失敗。

對這種演算法來說,最好的情況是第乙個位置就找到了,演算法複雜度為o(1),最壞是最後乙個才找到,演算法時間複雜度o(n),找不到的話需要n+1次比較,時間複雜度也是o(n)。關鍵字在任一位置的概率是相同的,平均查詢次數為(n+1)/2,終上,其演算法複雜度為o(n)

又稱二分查詢,前提是線性表中的記錄必須是關鍵碼有序(通常是由小到大),線性表必須採用順序儲存。基本思想為:在有序表中,取中間記錄為比較物件,若給定值與中間記錄的關鍵值相等,則查詢成功;若給定值小於中間記錄的關鍵值,則在中間記錄的左半區繼續查詢;否則在右半區繼續查詢。不斷重複上述過程,直到查詢成功,或所有查詢區域無記錄,查詢失敗為止。

演算法複雜度為o(logn),遠遠好於順序查詢的o(n)。

是根據要查詢的關鍵字key與查詢表中最大最小記錄的關鍵字比較後的查詢演算法,其核心是插值計算公式ke

y−a[

low]

a[hi

gh]−

a[lo

w],其中key是關鍵字,a[low]a[high]是查詢陣列的首末元素。

演算法複雜讀也是o(logn),但對於表長較大,而關鍵字分布又比較均勻的查詢表來說,其平均效能比折半查詢要好的多。

索引查詢是居於關鍵字無序的情況下產生的,畢竟現實中有序的關鍵字很少,大部分都是無序的。

索引就是把乙個關鍵字與它對應的記錄相關聯的過程,乙個索引由若干個索引項構成,每個索引項至少應包含關鍵字和其對應的記錄在儲存器的位置等資訊。

是把資料集的記錄分成了若干塊,並且這些塊需要滿足兩個條件:

在分塊索引表中查詢,分兩步進行:

1. 在分塊索引中查詢要查關鍵字所在的塊。由於分塊索引的塊間有序,因此很容易使用折半,插值等演算法。

2. 根據塊首指標找到相應的塊,並在塊中順序查詢關鍵碼。因為塊中可以是無序的,因此只能順序查詢。

索引項的通用結構為:

其中記錄號表儲存具有相同次關鍵字的所有記錄的記錄號(可以是指向記錄的指標或者是該記錄的主關鍵字)。這樣的索引方法就是倒排索引(inverted index)

如:由要查詢的單詞去查詢文章序號就是倒排,因為是從單詞出發,而不是從文章出發去查詢單詞。

二叉排序樹(binary sort tree),又稱為二叉查詢樹。它或者是一棵空樹,或者具有以下性質的二叉樹

二叉樹是以鏈結的方式儲存,保持了鏈結儲存結構在執行插入或刪除操作時不用移動元素的優點,只要找到合適的插入和刪除位置後,僅需要修改鏈結指標即可。

在最好情況下最少為1次,即根結點就是要找的結點,最多也不會超過樹的深度。也就是說,二叉排序樹的查詢效能取決於二叉排序樹的形狀,因此,如果二叉樹是平衡,即其深度最少時效能最好。

平衡二叉樹(self-balancing binary search tree或height-balanced binary search tree),是一種二叉排序樹,其中每乙個結點的左子樹和右子樹的高度差最多為1。

平衡因子(balance factor)是二叉樹上結點的左子樹深度減去右子樹深度的值,平衡二叉樹的所有結點的平衡因子只可能是-1、0和1,只要二叉樹有乙個結點的平衡因子的絕對值大於1,就不是平衡二叉樹。

距離插入結點最近的,且平衡因子的絕對值大於1的結點為根的字數,我們稱為最小不平衡子樹。

多路查詢樹(muilti-way search tree)是專門為了內外儲存裝置協同工作所設計的。其每乙個結點的孩子數可以多於兩個,且每乙個結點處可以儲存多個元素。

雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f(key)。查詢時,通過key的對映f(key)找到對應的位置。

把這種對應關係f稱為雜湊函式,又稱為雜湊(hash)函式,採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表(hash table)。

各種排序演算法和查詢演算法

自己實現了一遍氣泡排序 選擇排序 插入排序,留個念想 氣泡排序 簡單來說就是從陣列末端冒泡到陣列當前位置 void bubblesort unsigned char data,unsigned short length 選擇排序 當前位置之後的所有數跟當前位置的數比較,得到最小的數到當前位置 voi...

各種排序演算法分析總結

排序演算法 1 分類 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 直接選擇排序 堆排序 4 歸併排序 5 分配排序 箱排序 基數排序 所需輔助空間最多 歸併排序 所需輔助空間最少 堆排序 平均速度最快 快速排序 不穩定 快速排序,希爾排序,堆排序。1 選擇排...

各種排序演算法再分析

了解各種排序演算法的時間和空間複雜度,程式設計或呼叫庫函式實現各種排序 至少5種 將各種排序方法用各種資料進行測試。資料報括大規模資料 500000 1000000 小規模資料,最好資料,最壞資料,給定資料,隨機資料。對基於比較的排序跟蹤比較和交換次數。根據測試結果,對排序演算法進行分析時空複雜度以...