演算法和資料結構學習筆記

2021-07-10 17:35:16 字數 1377 閱讀 6802

演算法和資料結構就是程式設計的乙個重要部分,你若失掉了演算法和資料結構,你就把一切都失掉了。

一、資料結構和演算法緒論——說說資料結構

程式設計 = 資料結構 + 演算法

再簡單來說,資料結構就是關係,也就是資料元素相互之間存在的一種或多種特定關係的集合。

資料結構的分類:傳統上,我們把資料結構分為邏輯結構和物理結構。

其中的邏輯結構是指資料物件中資料元素之間的相互關係,也是我們最需要關注和討論的問題。而物理結構是指資料的邏輯結構在計算機中的儲存形式,我們不用去關心。

邏輯結構的分類:總共有四大邏輯結構。

集合結構:集合結構中的資料元素除了同屬於乙個集合外,他們之間沒有其他任何關係。

線性結構:線性結構中的資料元素之間是一對一的關係。

樹形結構:資料元素之間存在一種一對多的層次關係。

圖形結構:資料元素是多對多的關係。

說完邏輯結構,再來說說物理結構。物理結構研究的是如何把資料元素儲存到計算機的儲存器中。

資料元素的兩種儲存結構形式:順序儲存、鏈式儲存。

而鏈式儲存結構呢:他適用於那些時常要變化的結構,順序結構在這種情況下是力不從心的,只能讓鏈式結構來露面了,相比順序結構靈活的多。

二、**演算法

什麼是演算法:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

暈菜了吧?哈哈,更直白的講,演算法就是你泡妞的技巧和方式。

演算法的五個特徵:輸入、輸出、有窮性、確定性和可行性。

演算法設計的要求:正確、可讀、健壯、時間效率高(速度快)、儲存量低。

正確性的四個層次:

演算法程式沒有語法錯誤。

演算法程式對於合法輸入能產生滿足要求的輸出。

演算法程式對於非法輸入能產生滿足規格的說明。

演算法程式對於故意刁難的測試輸入都有滿足要求的輸出結果。

三、演算法效率的度量方法

經過總結,乙個高階語言編寫的程式在計算機上的執行時間取決於下列因素:

演算法的策略、方案

編譯器編譯產生的**質量(軟體)

問題的輸入規模(輸入量的多少)

機器執行指令的速度(硬體)

拋開軟硬體因素,那麼演算法效率就取決於演算法所採用的策略方案以及問題的規模。

經過總結,在判斷演算法效率時,主要關注主項(最高端項)的階數。

四、時間複雜度

時間複雜度:語句的總執行次數t(這裡的執行次數反映在計算機裡就是時間了)與問題規模n的關係。最優演算法當然就是時間增長最慢的那個。

五、時間複雜度分析、空間複雜度

常數階o(1) < 對數階o(logn) < 線性階o(n) < nlogn階o(nlogn) < 平方階o(n^2) < 立方階o(n^3) < 指數階o(2^n) < 階乘階o(n!)

空間複雜度:所佔空間位元組數關於問題規模的函式。

資料結構學習筆記 演算法分析

演算法分析方法 時間複雜度 空間複雜度 乙個演算法是由控制結構 順序,分支和迴圈 和原操作構成的。void fun int a,int n for i 0 i n i 4 演算法的執行時間取決於控制結構和原操作的綜合效果,如果for迴圈迴圈次數很多,哪怕原操作很快,時間也會比較長,即使只有乙個順序結...

Python和資料結構學習 3

下面是使用array實現vector.也就是python中自帶的list 如下 2 v v self.capacity 2 i,v self.length 1 self.length i range self.length,ndx,1 self i 1 1 i self i 1 1 i,v v 1 ...

資料結構學習筆記

資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...