資料結構查詢章節總結之一

2021-09-03 05:52:38 字數 1702 閱讀 8264

花了一上午的時間來從頭開始學習查詢,來總結下自己所學到的一點點東西。

就是很簡單的陣列的線性查詢,需要從頭開始乙個個去找(即為遍歷)那麼這種查詢方法的平均查詢長度在查詢概率相同的情況下為

a ss

s=1n

∑i=1

n(n−

i+1)

ass_s=\frac\sum_^n(n-i+1)

asss​=

n1​i

=1∑n

​(n−

i+1)

a ss

s=n+

12

ass_s=\frac

asss​=

2n+1

​關於查詢的乙個小技巧

typedef struct list 

list;

int search(list test, int key)

}

對於有序表我們肯定是十分熟悉的了,我們可以採用二分查詢的方式去找,其實就是我們平時用的二分法

typedef struct list 

list;

int search(list test,int left, int right, int key)

else if(key==test.elem[mid])

else

}}

那麼折半的平均查詢長度為多少呢?我們可以將整個查詢的過程視為乙個在二叉樹上搜尋的過程,二叉樹的根節點為這個有序陣列的中點.對整個二叉樹進行中序遍歷,可以得到我們原來的有序陣列.假設查詢每乙個節點的概率相同,假設是乙個滿二叉樹,那麼第一層節點有乙個,第二層有兩個…第n層有2(n-1)個,那麼查詢第乙個點的次數為1次,查詢第二層節點的次數為兩次,個數為2…查詢第n層的節點次數為n次,一共有2n-1個.我們假設一共有k個節點,那麼這k個節點所能生成二叉樹的層數至多為

n=log2(k+1).

那麼平均查詢長度就為

a sl

s=1k

∑i=1

ni∗2

i−

1asl_s=\frac\sum_^i*2^

asls​=

k1​i

=1∑n

​i∗2

i−1asl

s=k+

1klo

g2(k

+1)−

1;

asl_s=\fraclog_2(k+1)-1;

asls​=

kk+1

​log

2​(k

+1)−

1;k比較大的時候我們可以近似認為

a sl

s=lo

g2(n

+1)−

1asl

s=lo

g2(n

+1)−

1asl_s=log_2(n+1)-1asl_s=log_2(n+1)-1

asls​=

log2

​(n+

1)−1

asls

​=lo

g2​(

n+1)

−1所以線性折半查詢的效率要遠遠高於順序查詢,但它只能適用於順序儲存結構,和有序表.

前面較為簡單的部分就先總結到這裡,之後會更新更後面的章節,感覺都是硬骨頭.

資料結構之一

堆疊 strack 是指這樣一段記憶體,我們它可以理解為乙個筒結構,先放進筒中的資料被後放進筒中的資料 壓住 只有後放進筒中的資料都取出後,先放進去的資料才能被取出,稱為 後進先出 堆疊的長度可隨意增加。堆疊結構可用鍊錶實現。設計乙個鍊錶結構需包含兩個成員 乙個存放資料,乙個為指向下乙個節點的指標。...

資料結構 查詢總結

1.靜態查詢表與動態查詢表的區別 是否需要動態地插入或刪除。2.適合靜態查詢表的查詢方法 順序查詢 折半查詢 雜湊查詢等。適合動態查詢的查詢方法 二叉排序樹的查詢 雜湊查詢等。3.順序查詢缺點 當n較大時,平均查詢長度較大,效率低 優點是對資料元素的儲存沒有要求,順序儲存或鏈式儲存皆可。4.順序查詢...

資料結構 章節除錯模板

最近對資料結構程式不斷進行除錯,卻苦於知識點過於瑣碎,沒有一把合適的神器輔助一下,那麼神器來了,利用下邊模板你可以把每個知識點都放進 具體子類 中去,當你把每章知識都概括進去時,恭喜你,期末考試百分在望。一 這裡我先奉上我這個模板的結構圖 不要用html的眼光來審視,我隨便畫的,日後再學建模語言 簡...