日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最好最坏和平均情况下的性能分析

發(fā)布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最好最坏和平均情况下的性能分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最好最壞和平均情況下的性能分析

現(xiàn)在有一個問題,對于所有的輸入來說,前面得到的結果是否都成立呢?第二種排序法在少量字符串的時候性能也許是最好的。但是,輸入數據有很多地方可能變化:

輸入數據可能有1 000 000個字符串。算法如何處理如此大規(guī)模的數據?

輸入數據可能會是部分有序狀態(tài),也就是說,幾乎所有的元素所在的位置離最終位置并不是很遠。

輸入數據可能包含重復的值。

無論輸入數據的規(guī)模n是多少,輸入數據都可以從一個小得多的數據集擴展而來,不過會有相當多的重復值。

雖然從圖2-2上來看,第四種排序法在排序n個亂序字符串的時候是最慢的,但是處理已經排序的數據卻是最快的。但是,隨著n的增長,第四種排序法的領先優(yōu)勢消失得非常快,我們從圖2-3上可以看到,在對16個亂序的字符串進行排序時,第四種排序法就已經失去領頭羊的位置了。

?
?

盡管如此,假設一個包含n個字符串的輸入,并且這個輸入已經是幾乎有序,其中n/4個字符串(占總字符串的25%)被交換到僅僅是離最終位置4個元素。最終結果如圖2-4所示,我們看到第四種排序法性能表現(xiàn)遠遠好于其他的排序算法。

?

我們得到這樣一個結論,對于許多問題來說,并不存在單一的最優(yōu)算法。選擇一個算法需要對問題有著充分的理解,并知道這個問題將要處理數據規(guī)模的概率分布情況,還有算法的實際行為也必須要考慮到。

在這里我們提供一些指導,算法通常會分成三種情況進行分析:

最壞情況

定義一類輸入,在這類輸入下,算法表現(xiàn)出了最壞的運行性能。算法設計人員需要明白,這類輸入的共同性質阻止了算法高效地運行,而不只是針對特定的輸入。

平均情況

平均情況是表示算法在隨機給定的數據上期望的執(zhí)行情況。通俗地說,一些輸入可能會在某些特殊情況下耗費程序大量的時間,但是大部分的輸入并不會這樣。這個衡量標準描述了用戶對算法性能的期望。

最好情況

定義一類輸入,算法在這類輸入下表現(xiàn)出了最好的運行性能。對于這類輸入來說,算法只進行很少的計算。不過在實際情況下,最好情況很少出現(xiàn)。

通過分析三種情況,大致了解了算法的性能,那么接下來你需要為將要面臨的問題選擇一個算法。

最壞情況

大多數問題都可能會處理一些比n大的數據。任意給定一個n,算法或者程序在處理所有規(guī)模為n的數據,其性能可能會動態(tài)地發(fā)生變化。給定一個程序和n,這個程序的最壞運行時間就是處理所有規(guī)模為n的數據所需要的最長運行時間。

我們也看到,最壞情況是對整個世界的一個悲觀的分析。但是我們還是非常關注最壞情況,因為:

追根刨底的欲望

這通常是對一個算法復雜度的最早的分析。

實際運行時的限制

如果你需要設計一個系統(tǒng),協(xié)助外科醫(yī)生進行體外循環(huán)心臟手術,那么長時間的運行(即使這種情況是不經常發(fā)生)當然不可能接受。

更正式地說,如果Sn是數據集合si中規(guī)模為n的子集,t表示算法在每一份數據上的運行時間,那么最壞情況下,對于所有si∈Sn,算法在Sn上的運行時間是t(si) 的最大值。我們將在Sn下的最長時間記做Twc(n),Twc(n) 的增長率表示算法在最壞情況下的復雜度。

一般來說,沒有足夠的資源來計算每一份數據si,然后檢查算法在哪份數據上表現(xiàn)最壞。于是,給定算法的描述,算法分析人員總是想方設法地精心準備可能會導致最壞情況的輸入數據。

平均情況

現(xiàn)在要設計一個支持n個電話的電話系統(tǒng),n是一個非常大的數目,要求在最壞情況下,即n/2位用戶同時呼叫另外n/2位用戶時,這個系統(tǒng)也能夠正確地處理數據。雖然這個系統(tǒng)不會由于過載而崩潰,但需要花費過高的代價構造這樣的情況。而且,n/2位用戶同時呼叫另外n/2位用戶發(fā)生的概率極小。也許可以設計一個花費較小的系統(tǒng)在過載的情況下很少會(或者從不)崩潰。但是我們還是必需借助數學工具來計算這個概率問題。

對于一個n個樣本的數據集合,我們用一個概率分布Pr表示樣本的出現(xiàn)概率,單個樣本的出現(xiàn)概率為0到1,所有樣本的概率的和為1。如果Sn是n個樣本的數據集合,那么:

?

如果t表示算法在單個樣本的執(zhí)行時間,那么在Sn上的平均運行時間是:

??

也就是說,在樣本si的實際執(zhí)行時間,t(si) 將會與概率加權。如果Pr{si}=0,那么t(si) 的實際值將不會影響程序的期望運行時間。我們用Tac(n) 表示算法在Sn上的平均運行時間,那么Tac(n) 的增長率表示算法在平均情況下的復雜度。

回憶一下,當我們描述時間或者工作量的增長率時,我們一直忽視了常數,所以我們認為順序搜索n個元素的平均情況為:

??

探測(符合我們之前的假設),按照慣例,在符合這些假設的前提下,期望順序搜索能夠處理線性或者是n階的元素。

最好情況

知道算法的最好情況是非常有用的,即便這種情況很少發(fā)生。在很多情況下,最好情況能讓我們看到算法的最優(yōu)狀況。例如,線性搜索的最好情況是當它在n個元素中搜索v的時候,第一個元素恰好就是要找的那個。一個稍微有些不同的算法,我們叫做計數搜索(Counting Search),在n個元素中搜索v,并且記錄v在表中出現(xiàn)的次數。如果v的計數是0,那么這個值是不存在的,所以會返回false,否則返回 true。注意,計數搜索總是會搜索整個表,因此,它的最壞情況是O(n)(和順序搜索一樣),最好情況還是O(n),所以我們不能夠使用這個算法,因為它的最好或者平均情況沒有改善性能。

總結

以上是生活随笔為你收集整理的最好最坏和平均情况下的性能分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。