麻省理工《演算法導論》課程筆記 第1課時

2021-08-21 01:16:44 字數 1766 閱讀 7102

演算法分析理論研究:是關於電腦程式效能和資源利用的研究。

程式設計方面什麼比效能更重要:正確性、簡潔、可維護性、成本(時間成本、開銷)、穩定性、健壯性、功能性、模組化、安全性、可擴充套件性、與使用者友好性;

這麼多東西比效能更重要,我們為什麼還要關注效能?

通常效能的好壞決定是否可行。

排序:插入排序:(偽**)

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 只包含...