演算法基礎 01演算法複雜度

2022-07-09 08:27:09 字數 1446 閱讀 9902

程式設計處理問題時,可能有多種處理方法,那麼衡量寫出的程式的好壞的標準是什麼?

結果正確、執行速度快、結構優美,演算法設計合理都可以作為衡量標準。

程式=演算法+資料結構

演算法是對特定問題求解步驟的一種歸納描述。演算法是解決問題的邏輯、方法、過程,資料結構是資料在計算機中的儲存和訪問方式。兩者通常是緊密結合的。

演算法具有5個特徵:

輸入有零或多個輸入。可以沒有輸入,比如只進行一些輸出任務。

輸出有乙個或多個輸出。程式可以沒有輸入,但一定要有輸出。

有窮性在有限的步驟中結束。

確定性每一條指令都有明確的含義,相同輸入只能得到相同的結果。

可行性演算法描述的過程能通過已經實現的基本操作執行有限次來實現。(可以程式設計實現)

可以站在巨人的肩膀上高效地解決問題。

程式在執行時需要耗費兩種資源,即計算時間和空間儲存。資源是有限的,乙個演算法對兩個資源的使用程度可以用來衡量該演算法的優劣。

時間複雜度:程式執行時間的增速

空間複雜度:程式執行需要的儲存空間的增速

問題的有效解決,不僅在於能否得到正確答案,更重要的是能在合理的時間和空間內給出答案。

衡量演算法效能的主要標準是時間複雜度。

時間複雜度只是乙個估計,並不需要精確計算。

o(運算元)

一種特殊的表示法,之處了演算法的速度(增速)有多快。之所以稱之為大o表示法,是因為運算元前面有個大o.

多項式複雜度

計算時間是乙個常數,和問題的規模n無關。

計算時間是對數,通常是以2為底的對數,每一步計算後,問題的規模縮小一倍。二分查詢

指數複雜度

一般對應集合問題,例如乙個集合中有n個元素,求出它所有的子集,子集有2^n個。

時間複雜度指最糟糕情況下的執行時間。

對於輸入規模為n的演算法,我們可以統計它的基本操作執行次數,來對其效率進行度量.

找出演算法中最重要的操作,即所謂的基本操作,它們對總執行時間的貢獻最大,然後計算他們的執行次數。

不難發現,乙個演算法的基本操作往往是演算法最內層迴圈中最費時的操作。

找出語句中的基本語句

計算基本語句的執行次數的數量級

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。

用大o記號表示演算法的時間效能

將基本語句的執行次數的數量級放入大o記號中,形如o(數量級)

對於同乙個問題,經常存在不同的解決方案,有高效的,也有低效的。演算法程式設計競賽主要的考核點就是在限定的時間和空間內解決問題。通常時間限制為1s。1s計算機執行的次數約在106~108,所以,在知道程式複雜度後,根據資料範圍可以大體估算出程式的執行時間,從而輔助我們判斷該演算法能否滿足時間要求。

演算法複雜度基礎

演算法進行計算的時候,儲存資料需要占用一定的空間,執行計算需要耗費一定的時間時間。演算法複雜度就是在演算法計算過程中對 空間 與 時間 的評價。解決同乙個問題,不同演算法所有的空間和時間是不同的,這取決於演算法是如何設計的。同樣,同乙個問題,規模不同時,同乙個演算法所用的空間和時間也不同。例如 某排...

時間複雜度 空間複雜度 演算法基礎

1空間複雜度 演算法的空間效能分析 1 演算法的空間效能的影響因素 指令空間 由機器決定 資料空間 常量,變數占用空間 環境棧空間 2 度量方法 單個常量,變數 由機器和編譯器規定的型別儲存決定。陣列變數 所佔空間等於陣列大小乘以單個陣列元素所佔的空間。結構變數 所佔空間等於各個成員所佔空間的累加 ...

01演算法 時間複雜度分析

本書是基於演算法導論第一節課的總結。主要總結演算法分析中的時間複雜度,並通過排序演算法中的插入排序和歸併排序來分析。文章中的 由go語言實現 分析演算法執行的快慢,主要有以下幾個方面決定 輸入資料的大小 data size 輸入資料的好壞,在什麼樣的平台上執行。乙個好的程式或者軟體,需要對輸入的物件...