什麼是演算法?
用來處理運算和邏輯的問題的**塊
執行時間的長短和占用記憶體空間的大小是衡量演算法好壞的重要標準
執行時間長短用時間複雜度來衡量
執行占用記憶體空間的大小用空間複雜度衡量
時間複雜度與空間複雜度
1.時間複雜度
即漸進時間複雜度,用o表示
時間複雜度就是程式的相對執行時間函式t(n)簡化為乙個函式方程表示,如t(n)=o(n)、t(n)= o(nlogn)
推導時間複雜度的原則:
*1)執行時間如果是常數,如:t(n)= 4,則用o(1)表示
*2)只用時間函式中的最高端表示t(n)= n2+n3,則用o(n3)表示
*3)如最高端存在,省略最高端前係數t(n )=2logn,則用o(logn)表示
當n足夠大時,時間複雜度越小越好
常見時間複雜度由低到高順序:o(1)、o(nlogn)、o(n)、o(nlogn)、o(n2)
2.空間複雜度
度量乙個演算法在執行中臨時暫用儲存空間的大小,用o表示
常見空間複雜度:
1)常量空間
儲存空間固定,與輸入n無關,空間複雜度為o(1)
2)線性空間
演算法分配空間是集合,集合大小和輸入規模n成正比
空間複雜度為o(n)
3)演算法分配空間是乙個二維陣列集合,並且集合的長寬與n成正比
空間複雜度為o(n2)
4)遞迴空間
遞迴乙個特殊的場景,計算機會為遞迴專門分配記憶體,儲存方法呼叫棧,有入棧,有出棧,存粹的遞迴操作空間複雜度是線性的,遞迴深度為n,空間複雜度為o(n)
常見空間複雜度由低到高順序:o(1)、o(n)、o(n2)
時間與空間的取捨
大多數時候,我們認為時間複雜度更為重要,即便多分配一些記憶體空間,也要提高執行速度。
演算法效率的衡量
假設對於同一問題,我們給出了兩種解決演算法,在兩種演算法的實現中,我們對程式執行的時間進行了測算,發現兩段程式執行的時間相差懸殊,由此我們可以得出結論 實現演算法程式的執行時間可以反應出演算法的效率,即演算法的優劣。單靠時間值絕對可信嗎?假設我們將第二次嘗試的演算法程式執行在一台配置古老效能低下的計...
演算法的效率衡量
演算法效率衡量 先來看一道題 如果 a b c 1000,且 a 2 b 2 c 2 a,b,c 為自然數 如何求出所有a b c可能的組合?執行時間反應演算法效率 對於同一問題,我們給出了兩種解決演算法,在兩種演算法的實現中,我們對程式執行的時間進行了測算,發現兩段程式執行的時間相差懸殊 214....
聚類演算法的衡量指標
乙個簇中只包含乙個類別的樣本,則滿足均一性 其實也可以認為就是正確率 每個聚簇中正確分類的樣本數占該聚簇總樣本數的比例和 同類別樣本被歸類到相同簇中,則滿足完整性 每個聚簇中正確分類的樣本數占該型別的總樣本數比例的和 均一性和完整性的加權平均 rand index 蘭德指數 ri ri取值範圍為 0...