演算法複雜性分析及運算規則證明 一

2021-09-12 02:32:38 字數 2369 閱讀 1409

我們有必要知道演算法的複雜性是演算法執行所需要的計算機資源的量,需要空間資源的量稱為空間複雜度,同樣需要時間資源的量稱為時間複雜度。那麼這個量與什麼有關係呢?

這個量應該是只依賴於要解決的問題的規模,演算法的輸入和演算法的本身。

專業術語用c=f(n,i,a)三元函式表示。時間t(time),空間s(space)。

二者計量方法相似,且分析空間複雜度要比時間複雜度簡單,因此我們主要討論時間複雜度。但在此之前,同樣需要說一下空間複雜度。

空間複雜度是演算法在執行過程中臨時占用的儲存空間大小的度量, 同樣是關於問題規模n和演算法的輸入i的函式s=s(n,i)。只要演算法占用的儲存空間不要達到計算機無法接受的程度(實際生活上應該沒有或許不需要這樣的演算法)就行。所以,常常會見到通過犧牲空間複雜度來換取演算法更加高效的執行時間效率。

演算法在計算機儲存器上占用的空間包括三個部分:輸入輸出,演算法本身和執行臨時占有。

演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,它不會隨演算法的不同而改變。

演算法本身:儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這部分儲存空間,就必須編寫出較短的演算法。我想實際應用需要根據需求採取不同的程式語言來實現,不同程式語言實現的**長短差別很大,然而儲存空間都在可接受範圍之內(通常不同程式語言的效率更受關注)。

執行臨時占有

根據演算法在執行過程中臨時占用儲存空間的不同,可以將演算法分為兩類。

時間複雜度

在我們知道了上面所說的三元函式後,我們需要做的是如何將複雜函式具體化。即對於給定的n,i,a如何匯出t(n,i)的數學表示式,從而給出計算t(n,i)的法則。此處會用到高等數學的知識。

求t(n,i),演算法在一台抽象的計算機上執行所需的時間。

:設此抽象的計算機的元運算有k種,分別記為o1,o2,,,ok。每執行一次這些元運算所需時間分別為t1,t2,,,tk。要知道的是這些t為常數,元運算也就是類似加減乘除等的運算。

對於給定的演算法a,經統計,用到元運算oi的次數為ei(i為下標),對於每個i(1<=i<=k),ei是n和i的函式,即ei=ei(n,i)。

所以,t(n,i)=

顯然不可能對規模為n的每種合法輸入i都統計ei(n,i)

故:只能在規模為n的某些或某類有代表性的合法輸入中統計相應的ei來評價其時間複雜性。

在此,只考慮三種情況下的時間複雜性,即最壞情況,最好情況和平均情況。

圖示dn(n為下標)是規模為n的合法輸入的集合;i*是dn中使t(n,i*)達到tmax(n)的合法輸入。

實踐證明:可操作性最好的且最具有實際價值的是最壞情況的時間複雜度。

隨著研究的深入,要求用計算機解決的問題越來越複雜,規模越來越大,對求解這類問題的演算法進行複雜性分析具有特別重要的意義。因而特別關注。

在此引入複雜性漸進性態的概念。

設t(n)是前面定義的關於演算法a的複雜性函式。對於t(n),如果存在t(n),當n->

在數學上,t(n)是t(n)的漸進表示式。直觀上,t(n)是t(n)的高階項。

比如說:t(n)=4nlogn+3

當n->

進一步考慮到,分析演算法的複雜性目的在於比較求解同一問題的兩個不同演算法的效率。而只需確定各自的階就可以了。換句話說這時的漸進複雜性分析只關心t(n)的階。

所以,常常需要對t(n)的分析進一步簡化,即假設演算法中用到的所有不同的元運算各執行一次所需要的時間都是乙個單位時間。

為了與此簡化的複雜性分析相匹配,需要引入以下漸進意義下的符號o,

設f(n)和g(n)是定義在正數集上的正函式,存在常數c和自然數n0,使得存在n,當n>n0時,f(n)<=cg(n).則稱f(n)當n充分大時,上有界,且為g(n)。記為f(n)=o(g(n))。

簡要證明兩條規則(省略的寫)如下圖。

符號

定義f(n)=g(n))時,稱為f(n)與g(n)同階。

如果對於任意給定的o(g(n)。

演算法複雜性分析及運算規則證明 二

必須先說明一下定義 我看的定義是電子工業出版社王曉東的書 他說的是在文獻中有兩種定義,取的是以下定義 設f n 和g n 是定義在正數集上的正函式,存在常數c和自然數n0,使得存在n,當n n0時,f n cg n 則稱f n 當n充分大時,上有界,且為g n 記為f n o g n 可畫乙個簡圖如...

演算法 演算法複雜性分析

演算法分析是對乙個演算法需要多少計算時間和儲存空間作定量分析。此文主要介紹如何使用漸近分析記號來表示演算法的時間複雜度以及如何對演算法效率進行比較。輸入規模度量 執行時間的度量單位 演算法的最優 最差和平均效率 小規模輸入在執行時間上的差別不足以將高效演算法和低效演算法區分開來。乙個需要指數級操作次...

《計算複雜性與演算法分析》和《計算複雜性》學習

今天偶然間碰到數學界著名的七大千禧難題,關注了p和np問題,但是裡面提到關於演算法的複雜性的描述已經超出了自己的知識範圍,我找到了一本書來彌補這個不足,即 計算複雜性與演算法分析 希望自己在看完這本書之後能夠對計算複雜性有完整的概念 首先看看它的目錄 其實大部分的知識都有接觸過,但是沒有形成體系 接...