資料結構和演算法

2021-08-31 01:38:54 字數 3616 閱讀 7922

簡單演算法時間複雜度分析:

1.大o描述的是演算法的執行時間與輸入資料的關係

2.漸進時間複雜度,描述的是n趨於無窮時時間複雜度

動態規劃:

最短路徑:

鬆弛操作:

dijkstra單元最短路徑:不能處理圖中帶有負權邊,複雜度o(elogv)

bellman-ford單元最短路徑:不能處理帶有負權環,可以判斷,複雜度o(ev)

擁有負權環的圖,不再擁有最短路徑

floyed演算法處理無負權環的圖,o(v^3)

最長路徑:

最長路徑不能有正權環

無權圖的最長路徑是指數級別的

有權圖,不能使用dijkstra來求最長路徑

可以使用bellmanford

無權圖:

主要針對無向有權圖

lazyprim演算法

kruskal演算法

圖:

有向圖,無向圖

有權圖,無權圖

簡單圖:沒有自環邊和平行邊的圖

圖的表示方法:鄰接矩陣,鄰接表

鄰接表適用於稀疏圖

鄰接矩陣適用於稠密圖或者完全圖

深度遍歷複雜度:

稀疏圖-鄰接表 o(v+e)

稠密圖-鄰接矩陣o(v^2)

並查集:

目的:解決連線問題。網路中的連線狀態,網路是個抽象的概念,使用者之間形成的網路。數學中的集合

時間複雜度:並查集的操作,近乎是o(1)

雜湊表:

1.雜湊表設計充分體現了演算法設計領域的經典思想:空間換時間

2.雜湊表是時間和空間的均衡

3.雜湊函式設計很重要

4.建通過雜湊函式得到的索引分布越均勻越好。

雜湊函式設計:

1.原則:

一致性:a=b,hash(a)=hash(b)

高效性:計算高效

均勻性:分布均勻

查詢表也可以使用平衡樹。

平均每個位址承載的元素多過一定程度,就擴容。

雜湊衝突的辦法:

1.開放位址發

線性探測 

平方探測

二次雜湊

結論:擴容的負載率選的合適,時間複雜度也是o(1)

2.鏈位址法

3.colaecsed hashing

綜合了鏈位址法和開放位址法

紅黑樹:

1.概念:

每個節點或者紅色或者黑色

根節點是黑色的

每個葉子節點(最後的空節點)是黑色的

如果乙個節點是紅色的,那麼他的孩子節點都是黑色的

從任意乙個節點到葉子節點(最後的空節點),經過的黑色節點是一樣的

2.性質:

紅黑樹是保持「黑平衡」的二叉樹

嚴格意義上,不是平衡二叉樹

最大高度:2logn,o(logn)

統計效能好,還有伸展樹

字典樹:

線段樹:

使用原因:對於給定區間:更新區間中的乙個元素或者乙個區間的值。查詢區間的最大值,最小值,或者區間的和

是平衡二叉樹

優先佇列:

堆:

二叉堆:是一顆完全二叉樹,也是平衡二叉樹。堆中的某個節點的值總是不大於其父節點的值。最大堆,最小堆。

heapify時間複雜度:

將n個元素插入到空堆中,時間複雜度是logn

heapify時間複雜度是o(n)

集合和對映:

1.集合

(1)應用:客戶統計

詞彙量統計

有序集合的元素具有順序性(基於搜尋樹實現)

無序集合的元素具有無序性(基於雜湊表實現)

多重集合

2.對映

有序對映:鍵具有順序性(基於搜尋樹)

無序對映:鍵具有無序性(基於雜湊表)

多重對映:鍵可以重複

二分搜尋樹

1.使用樹的原因:天然的組織結構,高效

2.二叉樹:(1)具有唯一根節點

(2)每個節點最多有兩個孩子

(3)每個節點做多有乙個父節點

(4)具有天然的遞迴結構,每個節點的左子樹和右子樹都是二叉樹

(5)乙個節點也是二叉樹,null也是

3.二分搜尋樹:(1)是二叉樹

(2)每個節點大於左子樹所有節點的值,小於右子樹所有節點值

(3)元素具有可比較性

(6)二分搜尋樹中序遍歷是順序的

(7)二分搜尋樹的後序遍歷可以用來釋放記憶體

4.層序遍歷(廣度優先遍歷):可以更快搜尋,用於搜尋策略。也可以用於無權圖的最短路徑

5.二分查詢法:對於有序的數列,才能使用二分查詢法

遞迴

1.本質上,將大問題轉換為更小同一問題。

2.舉例:陣列求和

3.代價:函式呼叫消耗時間+系統呼叫棧

佇列:1.

鍊錶:

1.優點:真正的動態,不需要處理固定容量的問題。

2.缺點:喪失了隨機訪問的能力。

3.時間複雜度:增刪改查只對頭結點來說是o(1),平均是o(n)。

棧:

1.是一種線性資料結構

2.只能從一端新增元素,也只能從一端取出元素。

3.這一端稱為棧頂。

2.程式呼叫的系統棧

陣列:

1.特點:快速查詢,最好應用於「索引有語義」的情況

2.時間複雜度:

增:o(n)

刪:o(n)

改:已知索引:o(1),未知索引:o(n)

查:已知索引:o(1),未知索引:o(n)

資料結構和演算法

判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...

資料結構和演算法

程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...

資料結構和演算法

一 資料結構 1.概念 資料結構就是資料之間的結構關係,或者理解成資料元素之間存在的一種或者多種特定關係的集合,在傳統上資料結構分為邏輯結構與物理結構 1 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...