資料結構與演算法 基礎概念

mr.傑瑞發表於2020-12-10

資料結構:儲存資料的不同的方式。
1資料每個格佔用空間一樣大,格子挨在一起 叫陣列
插入新值:
如果要在一個陣列中插入一個值,那就比較難,因為格子是沒有空隙的。那怎麼辦呢,1.需要重新分配一個新單元格,比原來的要大,然後複製前後的資料,這個空間正好能裝入要加入的值。
查詢某個值:
根據單元格的所佔大小(計算偏移量),可以直接就能定位到要找的資料

2每個格子裡存著資料,還存著指向下一個小格子的指標,像一個鏈條,這樣的方式叫做連結串列
插入新值:
如果有一個連結串列,需要在中間插一個新值,需要將原有的鏈條打斷,然後和新值關聯。這個就比較容易
等等
查詢某個值:
必須通過鏈條一個一個往後找

演算法:同一個問題的不同解決方法。

如何知道演算法的優劣
時間測算
計算演算法時間差 (可以在程式碼前後計算時間)
幅度不夠迴圈來湊, (可以將這個程式碼迴圈10萬次看時間)
空間測算

時間複雜度
大O標記法,大O就是來標識時間複雜度的,計算機執行的時間隨著問題規模的擴大,時間變化的規律。
舉例:
比如陣列查第4個陣列和查第40萬的陣列,他們都只是需要計算一下偏移量,規模擴大對其沒有影響,都是固定的一個值,是個常數,那用
O(1)來表示
再比如 訪問連結串列的第4個值和查第最後一個值(算時間複雜度,都是要考慮最差的情況)讀一個是1s那讀4個就需要4s
O(n) 線性擴大 一般會忽略常數項比如O(2n) 忽略成O(n)
求陣列的平均數,時間複雜度是O(n) 因為需要把所有值加起來

兩遍迴圈就是n的平方
三遍迴圈那就是n的立方
空間複雜度
隨著問題規模的擴大,空間的變化規律

相關文章