輸入,輸出,有窮性,確定性和可行性。好的演算法,應該具有正確性、可讀性、健壯性、高效率和低儲存量的特徵。
1.事後統計方法
缺陷:
- 必須預先編制程式,浪費時間精力
- 比較以來硬體和環境等因素
- 演算法的測試資料設計困難,還有規模問題。
2.事前分析估算法:在計算機程式編制前,依據統計方法對演算法進行估算。
乙個程式的執行時間,依賴於演算法的好壞和問題的估算規模。所謂問題輸入規模是指輸入量的多少。
給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n,f(n)總是比g(n)大,那麼說f(n)的增長漸進快於g(n)
判斷乙個演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高端項)的階數。
定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
一般情況下,隨著n的增大,t(n)增長最慢的演算法為最優演算法。
o(1) 常數階
o(n) 線性階
o(n²) 平方階
推導大o階的方法:
用常數1取代執行時間中的所有加法常數。
在修改後的執行次數函式中,只保留最高端項。
如果最高端項存在且不是1,則去除與這個項相乘的常數。
執行次數函式
階非正式術語
12o(1)
常數階2n+3
o(n)
線性階3n²+2n+1
o(n²)
平方階5logn+20
o(logn)
對數階2n+3nlogn+19
o(nlogn)
nlogn階
6n^3+2n²+3n+4
o(n3)
立方階2^n
o(2^n)
指數階
耗費時間從小到大排序:
o(1) < o(logn) < o(n) < o(nlogn) < o(n²) < o(n^3) < o(2^n) < o(n!) < o(n^n)
資料結構與演算法基本概念
一 基本資料結構 基本資料結構的定義 特性 運算 演算法。基本資料結構的分類 邏輯結構 1 線性結構 線性表 棧 佇列 雙佇列 陣列 廣義表 串 2 非線性結構 樹 二叉樹 圖 網 儲存結構 1 順序儲存 向量 一維陣列 2 鏈式儲存 鍊錶 二 演算法 查詢 順序 折半 分塊 雜湊 二叉排序樹 排序...
資料結構與演算法 基本概念
課前導入 如何在書架上擺放圖書,擺放圖書有兩個相關操作。操作1 新書如何插入書架 操作2 如何找到需要的書 方法1 隨便放 一本本挨著放 操作1 直接放在最後面 操作2 一本本的找 方法2 按照書名的首字母排序 操作1 根據新書的首字母 二分查詢該插入的位置 移出空位 操作2 使用二分查詢 方法3 ...
資料結構 演算法基本概念
1 有窮性 2 確定性 3 可行性 4 輸入 5 輸出 1 時間複雜度 它定性描述演算法的執行時間。乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度,記為t n 時間複雜度又分為 最壞時間複雜度,平均時...