計算機演算法和演算法複雜度

2021-09-05 11:41:01 字數 2203 閱讀 6788

指基於特定的計算模型,旨在解決某一資訊處理問題而設計的乙個指令序列

實際應用問題--抽象數學描述---抽象關係描述與表達(建模)---演算法的輸入(input)與輸出(output)的確定----演算法步驟的描述---演算法的確定性和可行性分析---演算法的有窮性(finiteness)和確定性(correctness)分析---演算法的退化(degeneracy)和魯棒性(robustness)分析----演算法的重用性和可移植性分析

演算法的4大特性:

可計算性

難解性計算效率(可解、非不可解和難解)

資料結構(以「資料」這一資訊的表現形式為研究物件,旨在建立支援高效演算法的shuj資料資訊處理策略、技巧和方法)

執行時間與輸入規模之間的乙個函式。y:執行時間  x:輸入規模  -----表現形式t(n)  :時間複雜度

輸入規模:用以描述輸入所需的空間規模。

單理解為演算法中各條指令的執行時間之和。在圖靈機(turing machine ,tm)和隨機儲存機(random access machine ,ram)等計算模型中,指令語句均可分解為若干次基本操作。t(n)可表示為 演算法所執行基本操作的總次數。

實現同一問題的不同演算法之間不同規模之間執行時間的比較分析。------表現形式:t(n)、大o記號(big-o notation).

基於大o記號、環境差異、基本操作等因素的綜合分析。

空間複雜度主要指演算法儲存空間效能指標,即演算法占用儲存空間的多少。 可用類似時間複雜度的相關符號描述。

例項:常規元素的選取問題[任意三個元素排序,輸出非極端元素]

分析:輸入---輸入三個元素,三次操作o(3)-----比較三個元素,最多三次操作o(3)-----輸出非極端元素,一次操作o(1)----輸出。

計算: t(n) = o(3)+o(3)+o(1)= o(7) = o(1)

例項:對於任意非負整數,統計其二進位制展開中位數1的總數。

分析:輸入-- 輸入計數器d, 非負整數n----d=0,通過二進位制位的與運算,檢查你的二進位制展開的最低位,是1則累計到d中----輸出計數器d---輸出        

計算:o(1+[log2 n]) = o ([log 2  n]) = o(log2  n)

3.線性時間複雜度o(n) [ linear-time algorithm]

例項:計算給定n個整數的總和。

分析:輸入-- 輸入累計器sum, 整數n----sum=0,通過陣列元素求和演算法(迴圈迭代),累計sum------輸出sum--------輸出        

計算:o(1)+ o (1)* n  = o(n+1)  = o(n)

4.多項式時間複雜度o(polynomial(n)) [ polynomial-time algorithm ]

定義:執行時間可以表示為和度量為t(n) = o(f(n))的形式。例如:f(n) = 2[n]  (2的n次冪)等

例項:在禁止超過1位的位移運算的前提下,對任意非負整數n,計算冪

分析:迭代運算

_int64 power2bf_i (int n)   //冪函式演算法(蠻力迭代版) 輸入引數 n (n>=0)

{ _int64 pow = 1 ; //o(1) :累積器初始化為2的零次冪

while (0計算:o(n)= o(2^r)

注:

非有效演算法:不指定執行指數量級的指數複雜度演算法無法真正應用於實際問題中,故此稱為非有效演算法。

難解問題:不存在多項式複雜度演算法的問題。

o(1)、o(log* n) 、o(loglogn)、o(logn)、o(sqrt(n))、o(n)、o(nlog*n)、o(nloglogn)、o(nlogn)、o(n^2)、o(n^3)、o(n^c)、o(2^n)等。

計算機基礎 時間複雜度 空間複雜度

1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n 演算法中的基本操作一般指演算法中...

演算法和演算法複雜度

演算法 algorithm 是指解題方 而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果乙個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間 空...

演算法的時間複雜度和空間複雜度計算

在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度。記作 t n o f n 它表示隨問題n的增大,演算法執行時間的增長率和f n 的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複...