所用教材為:資料結構教程第4版 李春葆 主編
(1)資料元素之間的關係有邏輯關係和物理關係,對應的運算有邏輯結構上的運算(抽象運算)和具體儲存結構上的運算(運算實現)。
演算法是具體儲存結構上實現某個抽象運算
(2)確切地說,演算法是對特定問題的求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示計算機的乙個或多個操作。
(3)乙個演算法具有以下五個重要的屬性:
有窮性:程式可以無限迴圈,不一定滿足有窮性,但演算法必須滿足有窮性
確定性可行性
有輸入有輸出
1)描述方式:語言方式、文字描述方式、圖形方式和**方式等。
2)常用語描述演算法的c/c++語言基本語句:
(1)輸入語句
scanf(格式控制字串,輸入項表);
(2)輸出語句
printf(格式控制字串,輸出項表);
(3)賦值語句
變數名 = 表示式;
(4)條件語句
if(條件)語句;
或者if(條件)語句1 else 語句2;
(5)迴圈語句
while(表示式)迴圈體語句;
do迴圈體語句;
while 表示式;
(6)返回語句
return(返回表示式);
(7)定義函式語句
函式返回至型別 函式名(型別名 形參1,型別名 形參2,......)
(8)呼叫函式語句
函式名(實參1,實參2,.......)
正確性、可使用性、可讀性、健壯性、高效率與低儲存量需求
(1)事後統計法和事前分析估算法,大部分採用後者
(2)撇開與計算機硬軟體相關的因素,僅考慮演算法本身的效率高低,可認為乙個特定演算法的「執行工作量」的大小,只依賴於問題的規模(通常用整數n表示)
乙個演算法是由控制結構(順序、分支和迴圈三種結構)和原操作(指對固有資料型別的操作)構成的。
演算法執行時間大致為基本運算所需的時間與其運算次數(一條語句的執行次數稱為語句頻度)的乘積
被視為演算法基本運算的一般是最深層迴圈內的語句。
(3)演算法中基本運算執行次數t(n)是問題規模n的某個函式f(n),記作:
t(n) = o(f(n))
o表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同
「o」的形式定義:若f(n)是正整數n的乙個函式,則t(n)=o(f(n))表示存在乙個正的常數c和n0,使得當n>=n0時都滿足t(n)<=cf(n),也就是只求出t(n)的最高端項,忽略其低階項和常係數。
(4)各種不同數量級對應的值存在著如下關係:
o(1)(5)一般情況下,計算乙個演算法的基本運算次數是相當困難的,甚至是不可能的(因為乙個演算法的不同輸入往往產生不同的運算次數,而乙個演算法的所有不同輸入的數目可能十分龐大)。一種可行的方法是計算演算法的平均運算次數。
(1)乙個演算法的儲存量包括輸入資料所佔空間、程式本身所佔空間和輔助變數所佔空間。
在對演算法進行儲存空間分析時,只考查輔助變數所佔空間。
(2)空間複雜度是對乙個演算法在執行過程中臨時占用的儲存空間大小的量度,一般也作為問題規模n的函式,以數量級形式給出,記作:
s(n)=o(g(n))
若所需額外空間相對於輸入資料來說是常數,則稱此演算法為原地工作或就地工作。
若所需儲存量依賴於特定的輸入,則通常按最壞情況來考慮。
(3)對於遞迴演算法,為了實現遞迴過程用到乙個遞迴棧,所以需要根據遞迴深度得到演算法的空間複雜度。
著名的計算機科學家沃思(n.wirth)在《資料結構+演算法=程式》中指出,程式是由資料結構和演算法組成的,程式設計的本質是對要處理的問題選擇好的資料結構,同時在此結構上施加一種好的演算法
沃思指出,程式就是在資料的某些特定的表示方式和結構的基礎上,對抽象演算法的具體表述,所以說程式離不開資料結構。
由程式語言描述的演算法就是電腦程式。對求解乙個問題而言,演算法就是解題的方法,沒有演算法,程式就成了無本之木,無源之水,而有了演算法,再將它表示成程式是不難的。
資料儲存結構對演算法的影響主要在兩方面:
(1)儲存結構的儲存能力
(2)儲存結構應與所選擇演算法相適應。
儲存結構是實現演算法的基礎,其選擇要充分考慮演算法的各種操作,與演算法的操作相適應。
筆記 資料結構
解釋經典例題 計算給定多項式在給定點x處的值。f x a0 a1 x a n 1 x n 1 a n x n 方法一 double num int n,double array,double x 改進方法 double num int n,double array,double x clock 捕捉...
學習筆記 資料結構
一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...
Python筆記 資料結構
list list是python內建的一種資料型別。list是一種 有序的集合,可以隨時新增和 刪除其中的元素。定義列表的方法就是 例如 classmates michael bob tracy 支援按照索引訪問和刪除 支援在列表尾端插入和刪除 列表中的元素的型別可以不統一 tuple tuple是...