複雜度分析

2021-10-05 14:26:45 字數 1502 閱讀 2613

t(n) = o(f(n))

t(n):表示**執行的時間

n:表示資料規模的大小

f(n):表示每段**執行的總和

o:表示t(n)與f(n)成正比

可以粗略的分為兩類:

最好、最壞時間複雜度

//這段**要實現的功能是,在乙個無序的陣列中,查詢變數x出現的位置,如果沒有找到就返回-1

intfind

(int

array ,

int n ,

int x)

}else

}

最好時間複雜度分析在最理想的情況下,我們要找的變數x剛好是陣列的第乙個元素n那麼此時的時間複雜度為o(1)

最壞時間複雜度分析

在最壞的情況下,變數x不在陣列內,那麼久需要把整個陣列都遍歷一遍,那麼此時的時間複雜度為o(n)

平均時間複雜度分析

最好和最壞的時間複雜度都是對應的極端情況下的**複雜度,發生的概率並不大,為了更好的表示平均情況下的複雜度,就要引入另乙個概念:平均時間複雜度

查詢變數x的位置一共有n+1中情況,把每種情況下,查詢需要遍歷的元素個數累加起來,再除以n+1,就可以得到需要遍歷元素個數的平均值。

在時間複雜度的大o標記法中,可以省略掉常數、低階、常量,所以簡化後得到的平均時間複雜度為o(n)

要查詢的變數x,要麼在陣列裡,要麼就不在陣列裡。這兩種情況對應的概率統計起來很麻煩,為了方便你理解,我們假設在陣列中與不在陣列中的概

率都為1/2。另外,要查詢的資料出現在0~n-1這n個位置的概率也是一樣的,為1/n。所以,根據概率乘法法則,要查詢的資料出現在0~n-1中任意位置的概率就

是1/(2n)。

這個值就是概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。

實際上,在大多數情況下,我們並不需要區分最好、最壞、平均情況時間複雜度三種情況。很多時候,我們使用乙個複雜度就可以滿足需求了。只有同一塊**在不同的情況下,時間複雜度有量級的差距,我們才會使用這三種複雜度表示法來區分

均攤時間複雜度

在**執行的所有複雜度情況中絕大部分是低階別的複雜度,個別情況是高階別複雜度且發生具有時序關係時,可以將個別高階別複雜度均攤到低級別複雜度上。基本上均攤結果就等於低級別複雜度。

如何分析平均、均攤時間複雜度?

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...