資料結構之演算法篇

2021-08-13 19:32:55 字數 1400 閱讀 8447

演算法:是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

演算法的特性:

1.輸入輸出:演算法具有零個或多個輸入,至少有乙個或多個輸出。

2.有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。

3.確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。

4.可行性:演算法的每一步驟都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

演算法設計要求:

1.正確性:演算法的正確性是指演算法至少應該具有輸入,輸出和加工處理無歧義性,能正確反映問題的需求,能夠得到問題的正確答案。

4時間效率高和儲存量低:

演算法效率的度量方法

1.事後統計方法:這種方法主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。

2.事前分析估算方法:在計算機程式編制前,依據方法對演算法進行估算。

函式的漸近增長:給定倆個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n,f(n)總是比g(n)大,那麼,我們說f(n)的增長漸近快於g(n)。

判斷乙個演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高端項)的階數。

在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。

演算法時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

推導大o階方法

1.用常數1取代執行時間中的所有加法常數。

2.在修改後的執行次數函式中,只保留最高端項。

3.如果最高端項存在且不是1,則去除與這個項相乘的常數。

得到的結果就是大o階。

常用的時間複雜度所耗費的時間從小到大依次是:

常數階  o(1) < 對數階 o(logn) < 線性階 o(n) < nlogn階 o(nlogn) < 平方階 o(n^2) < 立方階 o(n^3) < 指數階 o(2^n) < 階乘階 o(n!) < o(n^n)

最壞情況執行時間是一種保證,那就是執行時間將不會再壞了。

平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。

對演算法的分析,一種方法是計算所有情況的平均值,這種時間複雜度的計算方法稱為平均時間複雜度。

另一種方法是計算最壞情況下的時間複雜度,這種方法稱為最壞時間複雜度。

一般在沒有特殊說明的情況下,都是指最壞時間複雜度。

演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。

資料結構之棧篇

關於棧 棧對應的操作 實現棧介面的實現 棧介面 author wbkearly param 棧中元素型別 public inte ce stack 基於自己實現的陣列類來實現棧的相關操作 arraystack 這裡的array類是在我之前部落格中所建立的array類,由於array中的操作已經非常的...

資料結構之佇列篇

關於佇列 實現佇列 佇列的操作 實現佇列介面 佇列介面 author wbkearly param 佇列中元素型別 public inte ce queue 基於array 之前部落格中定義的array類 實現佇列 arrayqueue 基於array實現的佇列 author wbkearly pa...

資料結構之陣列篇

什麼是陣列?array 物件用於在單個的變數中儲存多個值。陣列物件的作用是 使用單獨的變數名來儲存一系列的值。建立和初始化陣列 let arr new array 宣告並初始化乙個陣列 不推薦 let arr 推薦這種方式宣告陣列array常用方法 shift 刪除陣列第乙個元素並返回 var ar...