典型的查詢演算法

2021-07-11 23:40:28 字數 1421 閱讀 7892

查詢:

只進行查詢的稱為靜態查詢表;

在查詢的過程中同時插入查詢表中不存在的資料元素,或者從查詢表中刪除已經存在的元素,稱為動態查詢表。

靜態查詢:

1.順序查詢:

演算法思想:從表中最後乙個記錄開始,逐個進行記錄的關鍵字和給定值的比較,若某個記錄的關鍵字和給定值比較相等,則查詢成功,找到所查記錄;反之,若直至第乙個記錄,其關鍵字和給定值比較都不等,則表明表中沒有所查記錄,查詢不成功

平均查詢長度:(n+1)/2

2、二分查詢(有序表):

演算法思想:先確定待查記錄所在的範圍(區間),然後逐步縮小範圍直到找到或找不到該記錄為止。

平均查詢長度:(n+1)/n *log2(n+1) -1

3、分塊查詢(索引順序查詢):

演算法思想:首先將乙個線性表(即主表)按照一定的函式關係和條件劃分為若干個邏輯字表,為每個字表建立乙個索引項,由所有的字表的索引項構成乙個索引表。當進行分塊查詢時,先根據所給的關鍵字查詢索引表,從中找出給定k值小於或等於索引值的那個索引塊,找到待查塊,然後在主表中查詢該快,查詢待查的記錄。

平均查詢長度:索引表是有序的,所以在索引表中可以用順序查詢,也可以用折半查詢;而塊內的記錄的隨機排序的,所以在塊中用順序查詢。

順序查詢確定塊:平均查詢長度為1/2 *(n/s +s)+1

二分查詢確定塊:平均查詢長度為log2(n/s +1)+s/2

動態查詢:(表結構動態生成)

1、二叉排序樹查詢

二叉排序樹(二叉搜尋樹、二叉查詢樹):二叉排序樹中序遍歷得到的必定是乙個有序序列。

查詢過程:

(1)若查詢樹為空,查詢失敗;

(2)若查詢樹非空,將給定值和查詢樹的根節點比較:

若相等,查詢成功,結束查詢過程;

若給定值小於根節點,查詢將在根節點的左子樹上繼續進行,轉至(1)

若給定值大於根節點,查詢將在根節點的右字樹上繼續進行,轉至(1)

時間複雜度:平均o(logn),最壞o(n)

二叉排序樹的插入:

新插入的結點一定是乙個新新增的葉子節點,並且是查詢不成功時查詢路徑上訪問的最後乙個結點的左孩子或右孩子結點。

二叉排序樹的結點刪除:

假設在二叉排序樹上被刪結點為p,其雙親結點為f,且p為f的左孩子,下面分三種情況討論:

(1)若p結點為葉子節點,即pl和pr均為空樹,由於刪去葉子節點不破壞整棵樹的結構,則只需修改其雙親結點的指標即可。

(2)若p結點只有左子樹pl或者只有右子樹pr,此時只要令pl和pr直接成為其雙親結點f的左子樹即可。

(3)若p結點的左子樹和右子樹均不空。

2、二叉平衡樹

左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1.若將二叉樹上結點的平衡因子定義為該節點的左子樹的深度減去它的右子樹的深度,則平衡二叉樹上所有結點的平衡因子只能是-1,1,0.平衡樹查詢的時間複雜度為o()logn

典型的排程演算法

先來先服務排程演算法 fcfs 從就緒佇列中選擇最先進入該佇列中的的程序。屬於不可剝奪演算法,當長任務先到達系統,就會使得後面的許多短作業等待更長的時間。對長作業有利,對短作業不利 現對sjf和高響應比 有利於cpu繁忙型作業,不利於i o繁忙型作業。短作業優先排程演算法 sjf 從就緒佇列中選擇乙...

分治演算法以及典型例題

1 可以將大問題分解,分解後的問題容易解決 2 分解後的子問題是同一種類,並且具有最優子結構性質 下面會解釋 3 分解後的子問題解決後可以合併 4 分解後的子問題沒有公共問題 dp可以解決 ps 最優子結構 區域性最優解是全域性最優解的一部分,即當前的狀態是最優的,與後面的決策沒關係 同動態規劃與貪...

典型的貪心演算法 田忌賽馬 )

1.田忌賽馬 典型的貪心演算法 自己木有考慮到貪心的第二步導致wa了好多次 演算法分析 problem description 給出2n組資料,分別表示田忌和齊威王的n匹馬的速度,沒進行一場比賽 每組資料共n場場賽 若能分出勝負,則輸的一方要給贏的一方200y 銀元 求田忌以怎樣的策略才能賺取最多的...