第7章學習小結

2022-07-25 06:45:10 字數 1765 閱讀 1235

一、線性表的查詢

1、順序查詢:

typedef keytype int;//

這個根據具體情況去定義;在這裡定義為int; typedef structelemtype;

typedef

struct

sstable;

①查詢過程:按順序乙個乙個比對,直到找到為止;若全部對比完都沒找到,則意味著查詢失敗。

②設定哨兵與沒有設定哨兵的區別:時間複雜度同樣是o(n),但是從比較次數來看,設定哨兵的時間複雜度為o(2n),而沒有設定哨兵的時間複雜度為o(n)。

2、二分查詢:

int

search_bin(sstable st,keytype key)

return

0; //

表中不存在待查元素;

}

①要求表中的元素按關鍵字有序排列

②查詢過程:從表的中間記錄開始,如果與中間記錄的關鍵字相同,則查詢成功;若大於或小於中間記錄的關鍵字,則在表中大於或小於中間記錄的那一半中查詢,重複操作,

直到查詢成功,或者在某一步中查詢區間為空,則代表查詢失敗。

③邊界問題:

a)剩餘3個數:從中間記錄開始比對,最終轉化成剩餘1個數的問題。

b)剩餘2個數:假設取上,那麼mid=l,如果a[mid]>x,則r=l-1,l>r。

c)剩餘1個數:與剩餘兩個數一樣。

(因此,當l>=r,都是在搜尋範圍內)

④應用場景:

a)當找不到時,返回l或者r。

b)多條相同關鍵字記錄時,根據mid往前往後找相同關鍵字的記錄。

⑤注意:

a)對於陣列a使用二分查詢法查詢:首先排序,然後查詢,t(n)=o(nlog2(n))。

b)鍊錶不能以時間複雜度o(log2(n))實現折半查詢,因為鍊錶不能隨機訪問。

二、樹表的查詢

1、二叉排序樹

①性質:若左子樹不為空,左子樹上所有結點的值均小於根結點的值;若右子樹不為空,右子樹上所有結點的值均大於根結點的值;他的左、右子樹也分別為二叉排序樹。

②查詢:

a)若key=t->data.key,說明查詢成功。

b)若大於,則遞迴查詢右子樹。

c)若小於,則遞迴查詢左子樹。

③插入:若小於則插入左子樹,若大於則插入右子樹

④刪除:當刪除結點左右不為空時,找左子樹的最右結點,找右子樹的最左結點。

2、平衡二叉樹:平衡因子定義為該結點左子樹和右子樹的深度之差,平衡二叉樹上所有結點的平衡因子只能是-1、0和1.只要二叉樹上有乙個結點的平衡因子的絕對值大

於1,則該二叉樹不平衡

3、b-樹:多叉樹,一層有多個關鍵字。可減小高度,避免內外存反覆的交換。

4、b+樹:類似b-樹,可實現區間查詢。

三、雜湊表

1、構造方法:計算簡單;分布應均勻,盡可能減少衝突。

①數字分析法:僅適用於事先知道關鍵字集合。

②平方取中法:適用於不能事先了解關鍵字的所有情況,或難於直接從關鍵字中找到取值較分散的幾位。

④除留餘數法:最常用的構造雜湊函式的方法,選p為小於表長的最大質數。

2、處理衝突的方法

如果找不到空位,說明雜湊表已滿,需要進行溢位處理。

b)二次探測法:正增量為往後查詢,負增量為往前查詢

c)偽隨機探測法

我覺得這一章學得不夠好,這一章幾乎把前面的知識點都用上了,看來我還是需要再對前面的知識點搗一搗,不過還好,csdn上有需要知識點可以學到,可以補充了解,再接再勵,學期要結束了,期末考來了,得複習了。

第7章學習小結

在第七章我們學習了查詢演算法 查詢主要包括三種結構 線性表 樹表 雜湊表 一 線性表 順序查詢 折半查詢 分塊查詢 查詢時間複雜度 o n o log2n asl l查塊 l塊內查詢 特點毫無特點 效率高一點點咯 甚至不如折半查詢 通用情況 任何結構都行 有序的順序表 塊間有序 塊內無序的順序表 二...

第7章學習小結

查詢分為線性表的查詢 樹表的查詢 雜湊表的查詢。一些定義 查詢表 由同一型別的資料元素 或記錄 構成的集合 在查詢時對錶做修改操作,如插入和刪除,則稱為動態查詢表 否則稱為靜態查詢表 關鍵字 資料元素 或記錄 中某個資料項的值 如果乙個查詢表裡只儲存了關鍵字,意義不是很大 平均查詢長度asl 從1到...

Arc Engine開發第7章小結

gis的顯示內容主要是各種要素構成,在實際應用中,經常需要捕獲地圖上的要素。地圖互動物件 displayfeedback,可以實現移動旋轉節點編輯等重要功能。在第七章的例程中,由於第七章所提供的地 檔出現問題,導致整個程式無法執行,但是又找不到原有的可以替代的地 檔,這個就這樣先過去了 privat...