課時1:程序員
在程序設計方面,什麼是比性能更重要的?算法
1 正確性 2 簡潔 3 可維護性 4 程序員的時間成本5 健壯性 6 特性(功能)7 模塊化 8 安全 9 用戶友好安全
爲何關注性能?ide
1 性能的好與壞,直接決定着可行仍是不可行模塊化
2 算法是一種描述程序行爲的語言,普遍應用於計算機科學領域,被全部的實踐者所採用的理論語言,一種讓程序最爲簡潔的思考方式。性能是基礎函數
insert on sort(插入排序)性能
運行時間的問題:idea
* 輸入是否有序設計
* 輸入規模:將輸入的規模將其參數化,time=f(input size);blog
* 運行時間的上限
最須要關注的一種分析:最壞狀況分析
T(n)定義爲輸入規模爲n時的最長運行時間
有時討論:平均狀況
T(n)成了輸入規模n之下全部可能輸入的指望時間:每種輸入的運行時間*那種輸入出現的機率
假象,可能永遠不會出現,而且有必定的欺騙性:最好狀況
算法的大局觀(big idea):漸進分析
1 忽略掉那些依賴於機器的常量
2 不是去檢查實際的運行時間,而是關注運行時間的增加
漸進符號:Θ(theta)去掉低階項,忽略前面的常數因子
課時2:
Θ符號:
f(n)=Θ(g(n)),表示存在正常數c一、c2和n0,使對全部的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n);
對任一個函數f(n),若存在正常數c一、c2,使當n充分大時,f(n)能被夾在c1g(n)和c2g(n)中間,則f(n)屬於集合Θ(g(n)),
Ο符號:
f(n)=Ο(g(n)),表示存在正常數c和n0,使對全部的n>=n0,有0<=f(n)<=cg(n);
Ο符號在一個常數因子內給出某函數的一個上界
Ω符號:
f(n)=Ω(g(n)),表示存在正常數c和n0,使對全部的n>=n0,有0<=cg(n)<=f(n);
對全部在n0右邊的n值,函數f(n)的數值等於或大於cg(n)
定理:對任意兩個函數f(n)和g(n),f(n)=Θ(g(n))當且僅當f(n)=Ο(g(n))和f(n)=Ω(g(n));
ο符號:
f(n)=ο(g(n)),對任意正常數c>0,存在常數n0>0,使對全部的n>=n0,有0<=f(n)<=cg(n);
非漸近緊確的上界
ω符號:
f(n)=ω(g(n)),對任意正常數c>0,存在常數n0>0,使對全部的n>=n0,有0<=cg(n)<f(n);
非漸近緊確的下界
當漸進記號只出如今等式(或不等式)的右邊,如n=Ο(n*n)時,等號表示集合的成員關係:n∈Ο(n*n);
當漸進符號出如今某個公式中時,咱們將其解釋爲一個不在意其名稱的匿名函數,例如:2n*n+3n+1=2n*n+Θ(n)即表示2n*n+3n+1=2n*n+f(n),其中f(n)是某個屬於集合Θ(n)的函數,
經常使用函數:
指數式:對任意實數a>0、m和n,有下列恆等式:
解遞歸式的三種方法:
(1) 替換法:
第1步 猜答案 第2步 數學概括法 第3步 找出參數,使問題成立
(2) 遞歸樹:
(3 )主方法: