資料結構介紹(二)

2022-03-28 15:39:20 字數 2465 閱讀 9630

一、基本理論

1.資料與資訊

資料是資訊的載體,有序的資料組織就形成了資訊。資訊是人類可以直接利用或感知的意識形式。而資料則是用來被計算機識別、儲存和處理的,它是計算機利用或感知的基本單位。

2.資料型別

資料型別就是定義在乙個值的集合和定義在這個值集合上的一組操作的總稱。

3.抽象資料型別

抽象資料型別定義了乙個資料的邏輯結構,以及在此結構上的一組演算法。抽象資料型別描述程式處理的實體時,強調的是其本質特徵、其所完成的功能,以及它和外部使用者之間互動的介面,也就是adt的資料抽象特性。

二、演算法的設計

1.貪婪演算法

貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。

用貪婪法設計演算法的特點是一步一步地進行,常以當前情況為基礎根據某個優化測度作最優選擇,而不考慮各種可能的整體情況,它省去了為找最優解要窮盡所有可能而必須耗費的大量時間,它採用自頂向下,以迭代的方法做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為乙個規模更小的子問題,通過每一步貪心選擇,可得到問題的乙個最優解,雖然每一步上都要保證能獲得區域性最優解,但由此產生的全域性解有時不一定是最優的,所以貪婪法不要回溯。

例子:找錢

可以解決的經典問題有如下幾種:

1)圖的最小生成樹問題;

2)圖的最短路徑問題;

3)最小化任務執行的平均時間問題;

4)揹包問題;

2.分治演算法

是一種技巧性很高,不易理解的演算法。

可以使用分治法解決的問題有如下特徵:

1)整個問題可以分解為兩個或者多個較小的子問題;

2)對每個子問題的求解類似於對整個問題的求解;

3)如果子問題的規模仍然相當大而不可以對子問題方便的求解,那麼可以對子問題再次應用分治法

可以解決的經典問題有如下幾種:

1)傳染病問題;

2)二分搜尋以及快速搜尋;

3)矩陣乘法;

4)漢諾塔問題;

3.動態規劃

分治法是自上而下的,它把問題分解成乙個個子問題,通過對子問題的求解而實現對原問題的求解,動態規劃的思想與之相反,它是自底向上設計的,其思想方法是:避免對同樣的問題進行兩次求解。(重複計算正是遞迴演算法的硬傷~):計算二項式係數的乙個方法是可以使用牛頓-萊布尼茨公式,會要求計算c(m,n),根據公式c(m,n) = c(m-1, n)+c(m-1, n-1),可以採用分治法計算。另一種方法則是利用楊輝三角形,只需要根據已經存在的數值就可以構造出新的二項式係數,這就是動態規劃的思想。動態規劃法可以提高程式的執行的效率,但是它是以犧牲演算法的複雜性為代價的,降低了演算法的可讀性。

利用動態規劃思想解決的問題有如下特徵:

1)演算法要解決大量的重複性工作,計算大量的重複值;

2)至少有一些新的數值可以通過已經計算出的數值組合出來;

3)問題要有一定的規模,這樣才可以顯示出動態規劃的優點;

4)使用分治法劃分子問題的時候,子問題之間的關係界限不清,相互交叉,乙個子問題的求解與多個已經解決的子問題有關。

可以解決的經典問題如下:

1)快速傅利葉演算法;

2)多邊形的最優分割;

3)找零錢問題;

4)最短路徑問題;

5)揹包問題;

6)鏈式矩陣懲乘法;

4.回溯法

回溯法是一種優化的窮舉法。窮舉法就是窮舉問題的所有可能性直到發現問題的最優解,是一種高能耗的解法,需要大量的資源。回溯法可以有效降低窮舉法的高能耗。其缺點就是效率低。

回溯法可以解決的問題有如下基本特徵:

1)問題可以劃分為幾個不相關的子問題;

2)幾個問題有著類似的求解方法;

3)如果子問題還可以劃分,便繼續對子問題進行劃分。

由以上特點可以看出,回溯法可以解決的問題和分治法有相似之處,但兩者並不相同。回溯法本質是深度優先搜尋,需要棧儲存路徑,迴圈至問題得到解決或者棧空。

可以解決的經典問題:

1)迷宮問題;

2)四色問題;

3)騎士周遊問題;

4)圖的深度優先遍歷

5.概率演算法

與確定性演算法相比,概率演算法得到的結果是不精確的。但是這並不意味著概率演算法就得不到正確的結果,有時候往往效率更高。

其實質是:演算法對於同樣的輸入產生不同的結果,如果這個結果經檢驗是正確的,那麼演算法結束,否則演算法放棄這個結果,重新計算一次。對於精確演算法來說,輸入正確的引數一定得到正確的結果,而對於概率演算法來說,就可能得到錯誤的結果。

它還有乙個有點:以此可以得到多個正確答案,而精確演算法只能得到乙個最優解。

經典的概率演算法有如下兩種:

1)monte carlo演算法;

2)las vegas演算法

可以解決的經典問題有如下集中:

1)buffon的針;

2)驗證矩陣演算法;

3)素數性測試;

4)大整數分解因式;

資料結構介紹

當你決定看這篇文章,就意味著系統學習資料結構的開始。本節,我們先來講什麼是資料結構。什麼是資料結構 資料結構,直白地理解,就是研究資料的儲存方式。我們知道,資料儲存只有乙個目的,即為了方便後期對資料的再利用,就如同我們使用陣列儲存 是為了後期取得它們的加和值,無緣由的資料儲存行為是對儲存空間的不負責...

pandas資料結構介紹

pandas是基於numpy構建的,它以numpy為中心的應用變得更加簡單。pandas的資料結構介紹 series最重要的乙個功能是 它在算術運算中會自動對齊不同索引的資料。series物件及其索引都有乙個name屬性,該屬性跟pandas其他的關鍵功能關係非常密切 series的索引可以通過賦值...

HashSet資料結構介紹

hashset無參建構函式 hashset的預設建構函式,實際是創造乙個hashmap物件 public hashset 因為hashmap的擴充套件因子是0.75,及當0.75時就自動擴充套件,用構造的函式集合大小去初始 化hashmap,用擴 展集合的大小除以0.75 1與16比較,取較大的值作...