3 綜述
實現演算法一般使用以下幾種結構性原語:
常數級別
對數級別
線性級別
線性對數級別
平方級別
立方級別
指數級別
常見的增長數量級是基礎,與之對應的演算法在演算法分析設計中往往是基礎性的數學模型,讀者可以收藏一下下(感激!!!)
常見數量級
與之對應的模型及演算法
常數級別
普通語句,例如普通的加減運算
對數級別
二分策略,二分查詢
線性級別
迴圈操作,max操作
線性對數級別
分治,歸併排序
平方級別
兩層迴圈,檢查全部元素對
立方級別
三層迴圈,檢查全部三元組
指數級別
窮舉查詢,檢查所有子集
執行時間為常數級別的程式表示他完成程式所需的操作次數一定,這樣的程式段的執行不受n的影響,其實大部分基本操作都是常數級別的。
不應該忽略基礎操作對整體演算法的影響,單並不止於貪心處處使用基本操作優化演算法。
對數級別的程式一般比常數級別的程式執行時間短。
對數底數與增長數量級無關,原因也很簡單,因為不同底數在描述演算法過程中僅僅是乙個常數
所以在底數級數中一般使用logn描述
線性級別的數量級的增長與n成正比,但是不一定是一維的迴圈,比如常規輸入資料的過程也是線性級別的。
線性對數級別意指執行時間與規模n
nn成nlo
gnnlogn
nlog
n關係的程式,與對數級別相同,數量級與底數無關。
這兩中乙個是巢狀的兩層迴圈和三層迴圈。
指數級別的程式不適合執行需求較大的程式,但是在操作步驟較少的模型中依舊具有較為重要的地位。讀者可以在我後續的文章中進行體會。
演算法分析中的增長數量級和近似函式
描述 近似函式 調和級數求和 hn 1 1 2 1 3 1 4 1 n lnn 等差數列求和 1 2 3 4 n n 2 等比數列求和 1 2 4 8 2 2 斯特靈公式 lgn lg1 lg2 lg3 lg4 lgn nlgn 描述增長的數量級 典型 說明舉例 常數級別 1a b c 完成任務所需...
演算法分析1
最近學校開設了演算法課,大一的時候都沒有好好學,現在惡補一下。會把一些比較好玩的題寫上來分享,希望大家有更好的解法可以告訴我。1.蠻力法求解問題 猴子到森林裡採香蕉,森林距離家裡100公尺,猴子的揹包最多可以放下100個香蕉。但是,貪吃的猴子每行動1公尺需要吃1個香蕉,假設森林裡香蕉足夠多的情況下,...
常見演算法時間函式的增長趨勢分析
資料結構教程 第5版 上機實驗題1 實驗題2 目的 理解常見演算法時間函式的增長趨勢對以下函式用c 程式執行觀察其變化 log2 n n n n log2 n n n n 3 2 n n 1 從值的變化角度分析 s code 2 從消耗的時間的角度分析 介紹乙個計時函式 includeclock t...