(1)一系列解決問題的清晰指令,能夠在一定規範的輸入 在有限的時間內獲取所要求的輸出
(2)如果乙個演算法有缺陷 或者不適合於某個問題 則不能解決某個問題
(3)不通的演算法 可能有不同的時間 空間 效率來完成相同的問題
ps:演算法的好壞使用時間複雜度與空間複雜度來衡量
(1)有窮性:演算法必須在執行有限步驟之後停止執行
(2)確切性:演算法每一步驟必須有確切的定義
(3)輸入項:乙個演算法可以有0個或者多個輸入 以表示運算物件的初始化情況 0輸入代表演算法本身定出了初始條件
(4)輸出項:乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果,沒有輸出的演算法是毫無意義的
(5)可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)
(1)確定性: 指的是演算法至少應該有輸入,輸出和加工處理無歧義性,能正確反映問題的需求,能夠得到問題的正確答案。確定性大體分為四個層次:
1.演算法程式無語法錯誤;
2.演算法程式對於合法的輸入產生滿足要求的輸出;
3.對於非法輸入能夠產生滿足規格的說明;
4.演算法程式對於故意刁難的測試輸入都有滿足要求的輸出結果。
(2)可讀性: 程式便於閱讀,理解交流。
(3)健壯性: 當輸入資料不合法時,演算法也能作出相關處理,而不是產生異常,崩潰或者莫名其妙的結果。
(4)時間效率高和儲存量低。
(1)事後統計方法:主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低,但這種方法有很大缺陷,一般不予採納。
(2)事前分析估算方法:在計算機程式編制前,依據統計方法對演算法進行估算。
(3)乙個用高階語言編寫的程式在計算機上執行時所消耗的時間取決於以下因素:
演算法採用的策略,方法;(演算法好壞的根本)
編譯產生的**質量;(由軟體來支援)
問題的輸入規模;(由資料決定)
機器執行指令的速度。(看硬體的效能)
定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n}=0(f(n))。它表示隨問題規模n的增大,演算法執行時間的埔長率和 f(n)的埔長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f( n)是問題規橫n的某個函式。
根據定義,求解演算法的時間複雜度的具體步驟是:
⑴ 找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶ 用大ο記號表示演算法的時間效能。
將基本語句執行次數的數量級放入大ο記號中
如何推導大o階呢?下面是基本的推導方法:
1.用常數1取代執行時間中的所有加法常數。
2.在修改後的執行次數函式中,只保留最髙階項。
3.如果最高端項存在且不是1,則去除與這個項相乘的常數。
簡單的說,就是保留求出次數的最高次冪,並且把係數去掉。 如t(n)=n2+n+1 =o(n2)
#常見時間複雜度#####複雜度o(1)
#一條執行語句
print("
this is wd")
######複雜度o(n)
for i in
range(n):
(i)#
#####複雜度o(n2)
for i in
range(n):
for j in
range(n):
(j)#
#####複雜度o(n3)
#幾層迴圈就是n的幾次方
for i in
range(n):
for j in
range(n):
for k in
range(n):
print('wd'
)######複雜度o(log2n)
#每次迴圈減半
while n > 1:
(n) n = n // 2
常見的複雜度按效率排序:o(1)2)2logn)
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,這種演算法是節省儲存的演算法;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元。
如當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為0(log2n);當乙個演算法的空間複雜度與n成線性比例關係時,可表示為0(n).若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。
高階演算法 基礎概念梳理
1 整合學習 整合方法是將幾種機器學習技術組合成乙個 模型的元演算法,以達到減小方差 偏差或改進 的效果,通過弱學習器組合成強學習器。序列整合方法 adaboost,gbdt,模型之間強依賴 並行整合方法 隨機森林,模型之間無依賴 2 個體學習器 個體學習器整合學習的單元學習器,是整合學習的基礎學習...
推薦演算法一 基礎概念理解
隨著人工智慧的不斷發展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎內容。扯犢子,想轉行學 推薦演算法,記錄一下學習歷程!1.讓使用者更快更好地獲取到自己需要的內容 2.讓內容更好更快的被推薦到喜歡它的使用者 3.讓 平台 更有效的保留使用者資源 1.知你所想...
python基礎概念 python基礎概念
當你輸入name input 並按下回車後,python互動式命令列就在等待你的輸入了。這時,你可以輸入任意字元,然後按回車後完成輸入。要列印出name變數的內容,除了直接寫name然後按回車外,還可以用print 函式 以 開頭的語句是注釋,注釋是給人看的,可以是任意內容 整數python可以處理...