當前位置:首頁 » 操作系統 » 演算法分析處理

演算法分析處理

發布時間: 2025-02-16 05:35:12

演算法分析:如何分析一個演算法的效率好壞

當我們說演算法分析的時候我們在說什麼?(狹義的技術層面的定義):
演算法分析指的是: 對演算法在運行時間和存儲空間這兩種資源的利用效率進行研究
即時間效率和空間效率。

時間效率指演算法運行有多快;
空間效率指演算法運行時需要多少額外的存儲空間。
(時間效率也叫時間復雜度;空間效率也叫空間復雜度。)

在計算機時代早期,時間和空間這兩種資源都是及其昂貴的。但經過半個多世紀的發展,計算機的速度和存儲容量都已經提升了好幾個數量級。
現在空間效率已經不是我們關注的重點了,但時間效率的重要性並沒有減弱到這種可以忽略的程度。

所以,當我們分析一個演算法的的時候,我們只關注它的時間效率

當我們遇到一個演算法時,我們可以用這樣一個通用的思路去分析它:

首先第一卜伍知步考慮這個演算法的輸入規模是什麼?即輸入參數,再換句話說也就是待解決的問題有多大?
從這里入手是因為一個顯而易見的規律就是,不管使用什麼演算法, 輸入規模越大,運行效率肯定會更長
輸入規模的確定要根據具體要解決的實際問題的細節來決定,相同的問題不同的細節,輸入規模是不一樣的。比如:一個拼寫檢查的演算法,
如果演算法關注的是單獨的字元檢查,那麼字元的數量就是輸入規模的大小;
如果演算法關注的是片語搭配的檢查,那麼這個輸入規模就要比單獨的字元檢查的輸入規模要小,這里輸入規模就是詞的數量了。

接下來第二步考慮這個演算法的運行時間,即這個演算法運行地快慢。
我們可以簡單地用計時的方法,即某個演算法運行了多少毫秒。
但這個方式有一個缺陷就是在不同計算機上,相同演算法的運行時間是不一樣,因為有的電腦快有的電腦慢。
所以有沒有一種度量方法可以排除這些無關因素?
答案是肯定的,我們可以關注演算法執行了多少步,即 操作的運行次數 。而且為了簡化問題我們只需關注最重要的操作步驟,即所謂的 基本操作 ,因為基本操作已經足夠可以決定這個演算法的品質。
比如一個演算法通常是最內層的循環中是最費時的操作,那我們就只需要把它循環了多少次作為基本操作進行研究。

這里需要延伸的一點是在大規模的輸入情況下考慮執行次數的增長次數。因為針對小規模的輸入,在運行時間的差別上不太明顯。比如只對100個數字進行排序,不管你用什麼排序演算法,時間效率都差不多。只有在輸入規模變大的時候,演算法的差異才變得既明顯又重要了起來。
簡單來說,
如果一個演算法在輸入規模變大時,但運行時間平緩增長,那麼我們就可以說它就是一個效率高的演算法;
而如果一個演算法在輸入規模變大時,它的運行時間成指數級增長,那就可以說這個演算法的效率很差。
總而言之就是,對基本操作的大規模輸入情況下的變化的研究才更具有深遠意義。

當我們了解了輸入規模對演算法時間效率的會產生影響,但演算法的執行效率卻不僅僅只受輸入規模的影響,某些情況下,演算法的執行效率更取決於輸入參數的細節。
比如:一個簡單的順序查找的演算法,在數組里查找數字 9:
在數組 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9 ] 里查找數字 9 和在相同的輸入規模的另一個數組 l2 = [ 9 , 1, 2, 3, 4, 5, 6, 7, 8]里查找數字 9,在數組 l2 的執行效率肯定更高。
上面小例子中的兩個數組就體現了兩個極端: 輸入最優情況 輸入最壞情況
相對應的,
在輸入最優情況下的演算法就叫 最優效率
在輸入最壞情況下的演算法就叫 最差效率
在這里有兩個經驗性的規則:

在現實情況下,輸入是「隨機」的,既不會是最優輸入也不會是最壞輸入。所以這里又型消要引出一個概念,即: 平均效率
首先指出,我們絕不能用「最優效率」和「最差效率」的平均數求得 平均效率 ,即便有時間這個平均數和真正的 平均效率 巧合地一致。
正確的步驟是:我們要對輸入規模 n 做一些假設。
對於上面的順序查找演算法的例子,標準的假設有兩個:

基於這兩個假設求平均效率可得:

由此,平均效率橘燃 C(n) = p(n+1) / 2 + n(1-p)

由此可知,

從這個例子可以發現,平均效率的研究要比最差效率和最優效率的研究困難很多:
我們要將輸入規模 n 劃分為幾種類型,對於同類型的輸入,使得演算法的執行次數是相同的。

演算法是計算機科學的基礎,以後會繼續更新演算法相關的隨筆,對演算法感興趣的朋友歡迎關注本博客,也歡迎大家留言討論。
我們正處於大數據時代,對數據處理感興趣的朋友歡迎查看另一個系列隨筆:
利用Python進行數據分析 基礎系列隨筆匯總

Introction to The Design and Analysis of Algorithms, Third Edition by Anany Leitin

熱點內容
信息存儲公司 發布:2025-02-19 16:44:40 瀏覽:925
訪問學者簽證半年 發布:2025-02-19 16:44:34 瀏覽:113
瑪卡編程 發布:2025-02-19 16:39:23 瀏覽:638
三菱plc存儲卡 發布:2025-02-19 16:38:36 瀏覽:910
丨d密碼忘記了怎麼辦 發布:2025-02-19 16:18:16 瀏覽:272
linux匯編程序 發布:2025-02-19 16:17:21 瀏覽:737
兒童用葯安全進校園腳本 發布:2025-02-19 16:17:11 瀏覽:204
第四方源碼 發布:2025-02-19 16:07:30 瀏覽:573
linux終端模擬器 發布:2025-02-19 15:59:57 瀏覽:628
談談對彈性雲伺服器的理解 發布:2025-02-19 15:51:55 瀏覽:297