算法分析的方法

計算機科學又叫計算的科學 目標是使計算高效

算法正確性: 可執行 有窮性(Hailstone函數) 健壯性(非法輸入時保證程序不崩潰)
最重要:使程序運行時間短,佔用空間小

算法分析
正確性:分析算法的不變性和單調性(採用數學證明,對數器)
複雜度:包括時間空間,不妨先主要考慮時間 這樣我們就需要引入一把尺子作爲度量(T(n)一般n越大成本越大,n相同實例不同成本也不盡相同(Hailstone函數))

算法分析原則 :最壞 平均 分攤

對於特定問題不同算法不同編譯運行環境成本不同,引入理想的圖靈機模型和RAM模型
圖靈機模型 :讀寫頭,紙帶( 當前狀態內容,需要修改的內容 下一個狀態 最後復位(作爲算法一部分 復位是算法的規範要求 ))
RAM :無限個寄存器,有賦值操作 goto跳轉 stop
上述模型把需要計算的時間轉化成了運行次數!!!

如果模型是尺子,那麼漸進分析 big-O 記號好比尺子的刻度,比起局部小的變化趨勢我們更關注大規模長遠的變化
T (n)( fn) 存在c大於0,n>>2 ,T (n)<c·fn 因爲n比較大,我們處理T (n)表達式是可簡單放大化簡,忽略係數和較小項得到O(fn)
通過c變化,可使T (n)爲實際運行的上界
歐米伽下界,
c它有兩個係數 爲兩者中間

時間複雜度
O(1)
logn ( 因爲乘一個數可以改變底數所以不寫底數 ,n如果有指數可提成係數忽略)
線性 O(n)
指數的
np computer
多項式複雜度化簡,包含多個子算法如何比較得到成本?

算法分析
主要考慮正確性(不變 單調)和複雜度(迭代——級數求和 ;遞歸——遞歸跟蹤,遞歸方程 ;猜想+驗證)
級數求和(從幾何分佈上快速求解?!!!):
算術級數:T(n)=1+2+…+n=O(n^2) 與末項平方同階
冪方級數: 比冪次高出一階
幾何級數:T(n)=a^0+…+ a ^n (a>1) 與末項同階
收斂級數:T(n)=1+…+1/n^2 收斂到一個常數
調和級數:T(n)=1+1/2+。。+1/n n確定的logn
對數級數:T(n)=log 1+…logn=log(n!) 確定的nlogn
起泡排序:
定性
不變性:k輪掃描,最大k個元素就位
單調性: k輪掃描,規模n到了n-k
推出正確性,n輪掃描後 確定了n個元素 規模縮小到0,終止給出正答
定量
運算次數:外循環x=n,內循環(;y*y<x;y++) 推出y<n^1/2 推出 O(n ^1/2)
封底估算:10^9操作=1sec=10 ^-5 day

遞歸的分析方法
減而治之:將原問題化成一個平凡問題和一個規模減小的子問題
分而治之:分成兩個子問題,凡治衆先治寡
處理:遞歸跟蹤(幾何直觀),遞歸方程(代數抽象)

動態規劃:如果遞歸可以make run make right 那麼迭代可以make fast

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章