演算法與資料結構 一

2021-10-21 16:55:00 字數 3748 閱讀 7517

資料結構,直白地理解,就是研究資料的組織方式和儲存方式。 資料在計算機儲存空間的存放,決不是胡亂的,這就要求我們選擇一種好的方式來儲存資料,而這也是資料結構的核心內容。

資料儲存的目的是為了更好的使用 ,儲存之間具有複雜關係的資料,需要特殊的結構儲存,方便讀取使用; 

資料結構是一門學科,它教會我們「如何儲存具有複雜關係的資料更有助於後期對資料的再利用」。

1. 包結構 :  資料元素之間無關係

2. 線性結構 : 資料元素之間是一對一關係

3. 樹形結構 :  資料元素之間是1對多關係

4. 圖形結構 : 資料元素之間是多對多關係

1. 順序儲存結構 : 儲存資料的元素位址是連續的,可以通過索引獲取資料 :  查詢方便, 插入和刪除效能不好

演算法 : 用已知方法,通過編寫程式解決問題.

優秀的演算法: 

1. 時間維度, 用最少時間完成計算

2. 空間維度, 用最小記憶體完成計算

需求 :  1+2+3+..+ 100  

/**

* 演算法1

*/private static int cal(int n)

return sum;

}/**

* 演算法2

*/private static int cal2(int n)

比較 :  演算法1計算n次得出結果,  演算法2計算1次得出結果, 如果n是持續增大, 演算法1消耗時間肯定增加, 演算法2 基本沒什麼變化永遠一次計算得出結果; 這就是演算法的好處; 

事後分析 :  觀察法和實驗室,直接比較兩演算法的執行時間, 得出那種演算法更優

事前分析 :

演算法採用的策略,  (需要考慮的)

編譯**的質量  (沒辦法考慮)

問題輸入規格 (需要考慮)

機器指令的執行速速 (沒辦法考慮)

演算法分析一般需要考慮採用的策略和輸入的規格, 輸入的資料量的大小,應該採用不同策略;

時間複雜度分析法 :

1. 輸入規模n的增加, 判斷執行次數的多少, 可以模擬執行需要的時間

2.  分析** .去除變數定義的次數, 去除迴圈判斷的次數,   只分析核心計算**

對於兩個函式f(n)和g(n), 隨著n的增長,存在乙個點n, n>n的情況, f(n) > g(n)  , 說明f(n)的漸進增長快於g(n) 

na1(2n+3)

a2(2n)

b1(3n+1)

b2(3n)15

2432

7476

39610

981916

2524921

1828

2710

2320

3130

100203

200301

300比較分析 :  當n>2時候, b1的漸近增長大於a1,

隨著n的不算增大, a1和a2, 基本沒什麼差別,   b1和b2也沒什麼差別,所以說常數影響不大

比較 : b1和b2是平方增長, 演算法明顯大於a1和a2, 隨著n的不斷增大, b1和b2演算法的差別也不會特別明顯, 也就是說最高係數的常數影響在不斷減小.

演算法a1 : 2n^2+3n+1

演算法a2 : n^2

演算法b1: 2n^3+3n+1

演算法b2: n^3

實際的計算就不寫了, 肯定3次方的漸進增長最大的,  b1和b2比較, 也差別不大,  結論,低次冪的影響很小.主要是是高次冪影響

演算法1 : n^3

演算法2: n^2

演算法3: n

演算法4: logn

演算法5: 1 

結論:  演算法中最高次冪決定複雜復

時間度量 t(n) = o(f(n))

f(n) 表示執行次數

表示原則 :

常數忽略,只有常數轉換為1

最高次冪常數因子忽略

只保留高階

例項 : 

演算法a1 : 2n^2+3n+1     大o標記  o(n^2)

演算法a2 : n^2             大o標記  o(n^2)

演算法b1: 2n^3+3n+1   大o標記  o(n^3)

演算法b2: n^3       大o標記  o(n^3)

常見大o階

1.  線性階o(n)   累加求和, 也就是for迴圈1一次 

2. 平方階o(n^2)  兩次for迴圈巢狀, 氣泡排序  

3. 立方階o(n^3)  三層for迴圈

4.對數階o(logn)  二分查詢

5.常數階o(1)  高斯公式計算求和

複雜度從低-高

o(1)

複雜度分析 :  需要從最壞情況分析,比如排序,完全逆序排序,

空間複雜度分析,需要分析,演算法每次計算占用多少記憶體, n增加 需要的記憶體是不是巨量增大, 目前演算法主要是考慮時間複雜度, 空間複雜度,需要在特別消耗記憶體的演算法中考慮. 一般的演算法不是特別消耗記憶體. 

資料結構與演算法(一) 資料結構與演算法概念

資料結構是計算機儲存 組織資料的方式。資料結構是指資料與資料之間的關係。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。邏輯結構 示意圖1 集合結構 2 線性結構 3 樹形結構 4...

資料結構與演算法(一)

物件導向程式設計方式 1.使用自定義類封裝陣列 2.新增類方法來實現資料操作。無序陣列 增 刪 改 查 更 顯 public class myarray public myarray int maxsize 新增資料 public void insert long value 顯示資料 public...

資料結構與演算法一

遞迴 無限呼叫自身這個函式,每次呼叫總會改動乙個關鍵變數,直到這個關鍵變數達到邊界的時候,不再呼叫。遞迴與迴圈的區別?相同點 1 都是通過控制乙個變數的邊界 或者多個 來改變多個變數為了得到所需要的值,而反覆而執行的 2 都是按照預先設計好的推斷實現某乙個值求取 請注意,在這裡迴圈要更注重過程,而遞...