演算法 演算法複雜度

2022-05-19 10:50:13 字數 1802 閱讀 8233

演算法通俗的來說就是解決一些問題方法和步驟,那麼衡量演算法的標準有如下:

1.時間複雜度

時間複雜度也就是通常所說的演算法執行所需要耗費的時間,時間越短,演算法越好,當然也有解釋是程式要執行的次數,而不是程式執行的時間,因為有些機器效能高,程式執行的速度快,二有些機器效能一般執行就慢,所以這裡就不能用時間來衡量乙個演算法的好壞。乙個演算法執行的時間往往無法精確估計,通常需要在實際的計算機中執行才能夠知道。但是,我們也可以對演算法**進行估計,而得到演算法的時間複雜度。首先,演算法**執行的時間往往和演算法**中語句執行的數量有關。由於每條語句執行都是需要時間的,語句執行的次數越多,整個程式所耗費的時間就越長。因北,筒短、精悍的演算法程式往往執行速度快。另外,演算法的時間複雜度還與問題的規模有關。

所以評估時間複雜度的演算法分析有兩種:

1)事後分析評估法

就是去執行要評估的演算法**,在**執行的開始記下時間,然後等程式執行結束後在記下時間,這個一前一後的時間差就是該演算法**執行的總時間。

事後分析評估法有很大缺點:必須將**執行一遍之後才知道演算法的結果,如果乙個演算法比較複雜,執行時間長,等執行完之後才發現是乙個糟糕的演算法,會消耗大量的精力和時間,並且不同的執行環境差吧也是導致測試的結果差異很大。      

2)事前分析評估法

在編寫要測試的**之前,根據資料統計方法對演算法進行評估。我們發現編寫的**執行所消耗的時間有以下幾個因素:

(1)演算法採用的策略和方案(人為掌控)。  

(2)機器執行指令的速度(人為不可控)。

(3)問題輸入的規模(人為不可控)。

(4)編譯器是否有對**進行的優化質量(人為不可控)。

2.空間複雜度

空間複雜度指的是演算法程式在計算機中執行所需要消耗的儲存空間。空間複雜度其實可以分為如下兩個方面程式儲存所需要的儲存空間,也就是程式的大小。程式在執行過程中所需要消耗的儲存空間資源,例如程字在執行過程中的中可變數等。般來說,程式的大小越小,執行過程中消耗的資源越少,這個程式越好。在演算法分析中,空間複雜度有更為詳細的度量。

下圖標識了幾種常用演算法的複雜度:

下面**是常見排序演算法的演算法複雜度

演算法最快時間複雜度

平均時間複雜度

最壞時間複雜度

空間複雜度

是否穩定

氣泡排序

ω(n)

θ(n2)

o(n2)

o(1)

穩定插入排序

ω(n)

θ(n2)

o(n2)

o(1)

穩定希爾排序

ω(nlogn)

θ(n(log(n))2)

o(n(log(n))2)

o(1)

不穩定選擇排序

ω(n2)

θ(n2)

o(n2)

o(1)

不穩定堆排序

ω(nlogn)

θ(nlogn)

o(nlogn)

o(1)

不穩定歸併排序

ω(nlogn)

θ(nlogn)

o(nlogn)

o(n)

穩定快速排序

ω(nlogn)

θ(nlogn)

o(n2)

o(logn)

不穩定基數排序

ω(n+b)

θ(n+b)

o(n+b)

o(n+k)

穩定

演算法複雜度

就不加高亮度了。不是特能算這複雜度,但走軟體這條路是務必會算的。定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,...

演算法複雜度

好文章就要收藏,學習,文章講的很精闢!計算機最核心的資源就是cpu與儲存器,任何程式的執行都離不開二者。任何程式的執行都要進行計算,這就會消耗cpu 任何程式的執行也都需要進行資料的處理,cpu中是無法儲存資料的,必須借助儲存器來儲存資料。如果程式的cpu消耗過大會導致程式的執行時間變長 如果占用的...

演算法複雜度

同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能...