演算法分析理論研究:是關於電腦程式效能和資源利用的研究。
程式設計方面什麼比效能更重要:正確性、簡潔、可維護性、成本(時間成本、開銷)、穩定性、健壯性、功能性、模組化、安全性、可擴充套件性、與使用者友好性;
這麼多東西比效能更重要,我們為什麼還要關注效能?
通常效能的好壞決定是否可行。
排序:插入排序:(偽**)
for j
do key
iwhile i>0 and a[i]>key
do a[i+1]
ia[i-1]
#includevoid insertionsort(int *num,int n)
num[j+1] = tmp;//找到合適位置,將元素插入。
} }
int main()
; insertionsort(num,8);
/*這個函式必須知道元素的個數,所以將元素個數傳入。
有心者可以在函式內部用sizeof求出元素個數 */
1.取決於輸入資料
2.取決於輸入規模(我們將輸入的規模引數化以後,我們把與進行時間看做待排列資料規模的函式,將此作為審視演算法的依據)
3.執行時間的上界(執行時間會不會超過某個數值,代表了對使用者的承諾)
對演算法的各種分析:
2.平均情況;t(n)=輸入規模n之下所有可能輸入的期望時間(加權平均,需要做乙個統計分布假設)
3.最好情況分析(假象):沒什麼卵用。
取決於機器(比較相對速度,放在同一臺機器上執行)
演算法大局觀!漸近分析
1.忽略掉依賴機器的常量
2.不去檢查實際的執行時間,而是關注執行時間如何增長
漸進符號:
θ 棄去低階項,忽略前面的常數因子
歸併排序(過程):
mergesort a[1...n]
1.if n=i,done
2.遞迴排序
a[1...n/2] and
a[(n/2)+1...n]
3.歸併子串行
對總數為n輸入: time=θ(n)
//歸併排序
#include #include void mergearray(int *a,int left,int mid,int right)
while(x<=mid)
temp[z++]=a[x++];
while(y<=right)
temp[z++]=a[y++];
for(x=0;x
a[left+x]=temp[x];
}void mergesort(int *a,int left,int right)
}int main()
; mergesort(a,0,9);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
MIT麻省理工大學開放課程 《線性代數》第1課
lecture 01 the geometry of linear equations 第1講 方程組的幾何解釋 1 n元線性方程簡介 n方程n未知數 2 行影象 3 列影象 重點 4 矩陣形式 大圖 不管b是多少,是否都能求解方程?對任意b,是否能求解ax b?列的線性組合是否能覆蓋整個空間?以上...
麻省理工公開課 線性代數 第2課 矩陣消元
網易公開課 麻省理工公開課 線性代數 教材 introduction to linear algebra,4th edition by gilbert strang 假設求解 x 2y z 2 3x 8y z 12 4y z 2 一 消元 1.矩陣形式 a mathbf b 2.消元過程如下 矩陣 ...
麻省理工公開課 線性代數 第6課 列空間和零空間
網易公開課 麻省理工公開課 線性代數 教材 introduction to linear algebra,4th edition by gilbert strang 一 向量空間和子空間 加法封閉 數乘封閉 向量空間 r 3 的子空間 r 3 任意經過原點 0,0,0 的平面 p 和直線 l 只包含...