2 演算法概述

2021-07-28 03:18:39 字數 2237 閱讀 4898

參考:《大話資料結構》程杰

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,而且每條指令表示乙個或多個操作,資料結構與演算法是相輔相成的關係。

演算法是解決問題的方法,演算法(algorithm)是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,而且每條指令表示乙個或多個操作。

演算法有五個基本特性:輸入、輸出、有窮性、確定性和可行性。

(1)輸入輸出:演算法具有零個或多個輸入,至少有乙個或多個輸出,演算法一定需要輸出。

(2)有窮性:演算法在執行有限步驟後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。

(3)確定性:演算法的每乙個步驟都有確定的含義,不會出現二義性,演算法在一定條件下,只有一條執行路徑。相同輸入只有唯一的輸出結果,演算法的每個步驟精確定義而無歧義。

(4)可行性:演算法的每一步都必須是可行,每一步都能通過執行有限次數完成

演算法的設計要求:正確性、可讀性、健壯性、時間效率高和儲存量低

演算法效率的度量方法:事後統計方法、事前分析估算方法、

函式漸進增長:給定兩個函式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)的增長相同,稱為演算法的漸進時間複雜度。

1、推導大o階方法:

i、用常數1取代執行時間中所有的加法常量

ii、在修改後的執行次數函式中,只保留最高端項

iii、如果最高端存在且不是1,則去除與這個項相乘的常數,得到結果是大o階

2、常數階

不管這個常數是多少,我們都記作o(1)。執行的次數都是恆定的,不會隨著n的變化而發生變化。

3、線性階

確定某個演算法的階次,需要確定某個特定語句或某個語句集執行的次數,分析演算法的複雜度,關鍵是分析迴圈結構的運**況, 如下**時間複雜度為o(n)

int i

for(i = 0; i

< n; i++)

4、對數階

每個count乘以2之後,距離n更近一倍,有多少個2相乘後大於n,則會退出迴圈。時間複雜度為o(logn)。

int

count = 1;

while( count

< n)

5、平方階

時間複雜度為o(n^2)

int i, j;

for(i = 0; i

< n; i++)

}

時間複雜度為o(n*m)

int i, j;

for(i = 0; i

< n; i++)

}

以下迴圈巢狀的時間複雜度為o(n^2)

int i, j;

for(i = 0; i

< n; i++)

}

總結

常見的時間複雜度

時間複雜度的消耗從小到大為:

最壞情況執行時間是一種保證,執行時間將不會再壞了,在應用中,這是一種最重要的需求。除非特別指定,提到的執行時間都是最壞情況的執行時間。

平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。

演算法的空間複雜度是通過計算演算法所需的儲存空間實現的,演算法空間複雜度的計算公式記做:s(n)=o(f(n)),其中n為問題的規模,f(n)是關於n所佔儲存空間的函式。

一般的,程式執行時,需要儲存程式本身的指令、常數、變數和輸入資料外,需要儲存對資料操作的儲存結構,若演算法執行時所需的輔助空間相對於輸入資料量是常數,則稱空間複雜度為o(1)。

PBKDF2 演算法概述

pbkdf2 password based key derivation function 是乙個用來匯出金鑰的函式,常用於生成加密的密碼。它的基本原理是通過乙個偽隨機函式 例如hmac函式 把明文和乙個鹽值作為輸入引數,然後重複進行運算,並最終產生金鑰。如果重複的次數足夠大,破解的成本就會變得很高...

遺忘演算法 演算法概述

一 遺忘演算法原理 能夠從未知的事物中發現關聯 提煉規律才是真正智慧型的標誌,而遺忘正是使用智慧型生物具備這一能力的工具,也是適應變化的利器,遺忘 這一頗具負能量特徵的傢伙是如何實現發現這麼個神奇魔法的呢?讓我們從巴甫洛夫的狗說起 狗聽到了鈴聲就知道開飯了。鈴聲和開飯之間並不存在必然的聯絡,我們知道...

常見演算法 概述

一 演算法概述 演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示乙個或多個操作。此外,乙個演算法還具有5個重要特性 有窮性 確定性 可行性 輸入 輸出。二 演算法設計 通常求解乙個問題可能會有多種演算法可供選擇,選擇的主要標準首先是演算法的正確性和可靠性 簡單性和易理解性...