算法系列1 初識算法 算法復雜性模型 算法復雜度的計算


算法系列1 初識算法

什么是算法?

在這里插入圖片描述定義:由若干條指令組成的有窮序列,且滿足:輸出輸入,確定性,有限性
輸入:有零個或多個由外部提供的量作為算法的輸入
輸出:算法產生至少一個量作為算法的輸出
確定性:組成算法的每條指令是清晰的,無歧義的
有限性:執行每條指令的時間是有限的,執行的次數也是有限的

D.E.Knuth(高德納)在他的專著程序的設計的藝術中給出了一個算法的定義是目前學術界比較認可的,
定義如下:算法是定義一個可終止的有序的,無歧義的,可執行的步驟的集合

要成為金字塔頂的程序員,算法是我們取經之路上必不可少的,讓我們一起打開算法的大門,
互相監督,共同進步,我將會在我的個人博客更新我的算法系列文章。

在這里插入圖片描述

算法與程序的區別

算法是計算機科學的核心,是指解決問題的結構化流程,是編排計算機指令的策略性步驟,算法是與語言無關的。即算法不依賴於什么樣的程序設計方法,更不依賴於具體的編程語言
算法:一種語言
程序:一種文本
算法:受專利法保護
程序:受著作法保護

在這里插入圖片描述

一些算法的名稱

在這里插入圖片描述
在這里插入圖片描述
我也會逐一學習這些算法,共勉

在這里插入圖片描述
我們既然要學算法,那么自然要學怎么判斷一個算法的高效性,即什么算法能讓我們的程序跑的更快,占用的內存更小。這就要學習算法的復雜度模型

算法的復雜度模型

復雜性的問題規模N,輸入I和算法A的函數
T=T(N,I,A)
問題規模N沒有明確的單位。T也沒有明確的單位,一個輸入I對應一個問題的實例
判斷一個算法的高效與否不能僅僅看一個算法運行速度的快慢,還要看看一個算法占用內存的多少,這就有了時間復雜度與空間復雜度

我先來講講沒有學習計算算法的復雜度之前,我是怎么來判斷一個算法的高效與否的,我相信這也是大多數人的錯誤
我當初認為評價一個算法的執行效率無非就是給出一組數據,用不同的算法進行運算,這種方法也叫事后統計法,但是這種方法是有很明顯的缺點的

在這里插入圖片描述

缺點

1.執行時間嚴重依賴硬件以及運行時各種不確定的環境因素
2.必須編寫相應的測試代碼,比較麻煩
3.測試數據的選擇比較難保證公平公正,這句話的意思就是可能不同算法對不同數據的處理效率不
比如有兩個算法,兩組數據,當輸入數據1的時候算法1的效率更高,當輸入數據2的時候算法二的效率跟高

我們一般使用以下緯度來評估算法的優劣:正確性,健壯性,可讀性
時間復雜度:估算程序指令的執行次數
空間復雜度:估計所需要占用的內存

算法復雜性模型

復雜性是問題規模N,輸入I,和算法A的函數
T=T(N,I,A)
問題規模N沒有明確的單位
T也沒有明確的單位
一個輸入I對應一個問題實例

對特定的算法我們可以把A省略,得到T=T(A,I);
計算機有k種運算O1,O2……Ok。各有其執行的時間ti;
針對具體問題只取主要的運算Om為度量單位
例如:只涉及四則運算,取乘除問題為主要運算,對排序問題,取比較操作為主要運算

最壞情況,最好情況,平均情況

最壞情況Tmax= Tmax (N)=max[I]{T(N,I)}
最好情況Tmin = Tmin (N)= min[I]{T(N,I)}
平均情況Tavg = Tavg (N)= average[I]{T(N,I)}
各自的優點
最常用的是最壞情況時間復雜性

計算時間復雜度的例子

在這里插入圖片描述
復雜性的漸進形態

在這里插入圖片描述

算法復雜性的階

進一步忽略系數的漸進性形態---------階,階有四種,上界階,大O
定義
例如T(n)=2n-2k-1,其漸進形態為2n,省去系數后,其上界階O(n)
下界階,Ω
同級階,θ
無窮小階,小o

對階記號的認識

在這里插入圖片描述

大O表示法(Big O)n-1

一般使用大O表示法來描述復雜,他表示數據規模n對應的復雜度,忽略常數,系數,低階

9 >> O(1)
2n+3 >> O(n)
n^2   +2n+6     >> O(n ^2)
n^3 +  3n ^2 +2n+6     >> O(n ^3)

大O表示法僅僅是一種粗略的分析模型,是一種估算,幫助我們短時間內了解一個算法的執行效率

對階數的細節
對階數一般省略底數

(圖片來源小碼哥)
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述為了讓大家更直觀的對比復雜度的大小我使用一個函數生成對比工具
(圖片來源小碼哥)

數據規模較小時

在這里插入圖片描述
數據規模較大時

在這里插入圖片描述

以上就是對算法復雜性計算的一些略微的總結,在后續學習過程中我會不斷完善,歡迎大家關注我和我一同學習,一同進步

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM