大話西遊之王道考研資料結構第十講 查詢

2021-08-22 19:16:18 字數 2667 閱讀 3407

複習

prim、kruskal、dijkstral複雜度分別是多少?

如何判斷乙個圖是連通的?dfs遍歷一次輸出的是圖中什麼內容?

無向圖中刪除某個頂點的複雜度是多少(用鄰接鍊錶存)?

是什麼造成拓撲排序不唯一?

關鍵路徑的五個函式都應該怎麼求?

在資料集合中尋找滿足某種條件的資料元素的過程稱為查詢。查詢的結果一般分為兩種,查詢成功和查詢失敗(還記得我們在二叉排序樹裡面,計算了兩種平均查詢長度 asl成功和asl失敗,還記的asl失敗是怎麼計算的麼?)。

1.1 順序查詢

這個其實就是線性表的查詢方式,

int search_seq(int a,int n, int key)

}a[r+1] = t;

}

二分查詢的圖表示其實就是一顆平衡二叉樹

這裡面的計算用到了高數裡面無窮級數那一章裡面的內容,剛好可以把那一章複習一下,並且終於明白那一章不僅難,還有點用。。。

所以折半查詢的複雜度是

1.4 分塊查詢

分塊查詢結合了順序查詢和折半查詢的優點,需要另外開闢乙個索引表,把n個元素分為k塊,索引表長度為k,索引表中的元素,代表對應塊中最大元素。在索引部分採用折半查詢,內部採用順序查詢。

所以總共的平局查詢長度應該分為兩部分,設索引查詢和塊內查詢的平均查詢長度為

設將長度為n的超找錶均勻的分為b塊,每塊有s個記錄,在等概率的情況下,若在塊內和索引表中均採用順序查詢,則平均查詢長度為:

此時,若

如果對索引採用折半查詢時候,平均長度為:

如果我們想查詢乙個表裡有沒有元素k,如果這個表是無序的,那麼複雜度應該是o(n),就算是有序的,順序查詢是o(n),折半查詢是

hash的意義在於把乙個大的集合a,對映到小的集合b,這樣查詢起來會更省時。雜湊表是根據關鍵字直接進行訪問的資料結構。我們通過雜湊函式,把關鍵字對映到對應的函式中。雜湊函式可能會把兩個或兩個以上的不同關鍵字對映到同一位址,稱這樣的情況為「衝突」。

1.1 雜湊函式的構造方法

1.2 處理衝突的方法

1. 開放定址法

這個需要把資料放在陣列裡面

這個d的確定有好幾種方法,比如d每次增加1,或者每次變為平方,或者換個雜湊函式,或者隨機選乙個。

a.線性探測法:發現衝突時候,乙個乙個往後挪,直到找到空位子坐下~但是這樣會造成大量元素在相鄰的雜湊位址上"聚集」(堆積),大大降低查詢效率。

b.平方探測法:

c.再雜湊法:發現衝突以後,通過另乙個函式,重新選取位置,直到不發生衝突為止。

2.拉鍊法

這個就有點像鍊錶了,所以你會發現資料結構過來過去,儲存方式就這倆種,很多地方都是通的。

1.3 asl成功和失敗

1.雜湊表中一共有四個主要引數,p,n,m,a。其中p是待取模的質數,m是整個表的長度,n是元素的個數,a是裝填因子

2.雜湊表採用開放位址法時候,查詢失敗的分母取決於p而不是m。

2.雜湊的查詢效能,即平均查詢長度依賴於雜湊表的裝填因子a,不直接依賴於n

m。

3.拉鍊法中,查詢失敗有兩種不同的計算方式,這裡我們採用教材規定的上面那種。

這裡,容易想到的乙個簡單的演算法就是乙個乙個比演算法,在s中挨個查詢,如果某個位置往後和t能夠完全匹配,就返回這個位置,如果不行,就看下這個位置的下一位,直到s字串全部檢查完畢。

3.1 簡單的模式匹配演算法

int index(char s,int sum_s,char t,int sum_t)

else

}if(j >= sum_t)

else return 0;

}

kmp演算法算是本科裡面學到過的最難理解的演算法之一了,當初也是花了很長時間去學習這個東西,那個時候雖然搞懂了,但是現在又給忘了,而kmp剛好考研時候只考next陣列的計算方式(完全弄懂kmp對於只應付我們學校初試來說,沒有太大必要)。next陣列裡面:

1.next[1] = 0,next[2] = 1

2.後面每乙個來說,只需要看看其前面的陣列裡面,字首字尾重複的最大長度是多少,然後加1就好了,比如計算next[6]時候,前面最大字首是aba,字尾是aba 所以next[6]=  3+ 1 = 4編號

1 2

3 4

5 6

7 8

9 10

11 12

s a

b a

b a

a a

b a

b a

a next 0

1 12 3

4 22 3

4 56

王道考研 資料結構 筆記

上面這張圖來自課件,發現這張圖將計算機四大基礎學科之間的關係很好的體現出來了,故貼在這。資料元素 資料項 資料元素是資料的基本單位。資料元素由資料項組成。如,在飯館排隊的顧客,可用以下資料元素和資料項表示 資料結構 資料物件 資料結構是相互之間存在一種或多種特定關係的資料元素的集合。資料物件是具有相...

2021 王道考研 資料結構 習題講解

2021王道資料結構高畫質pdf p1 2021版 0.0 課程指南 p2 2021版 1.1.0 開篇 資料結構在學什麼 p3 2021版 1.1.1 資料結構的基本概念 p4 2021版 1.2.1 演算法的基本概念 p5 2021版 1.2.2 演算法的時間複雜度 p6 2021版 1.2.3...

王道考研資料結構佇列 綜合習題題解

q1 使用tag標籤判斷隊滿隊空。寫出出入隊的操作。ans 我直接給出抽象資料型別吧。include define maxsize 50 using namespace std class cyclequeue cyclequeue cyclequeue cyclequeue enqueue int...