时间复杂度和空间复杂度[数据结构]
參考:本文為小甲魚教學視頻的學習筆記。
?
1、為什么要學習時間復雜度和空間復雜度?你說一個算法好另外一個算法不好,有什么推斷根據?哪個算法效率高?怎么推斷?那么就要學習時間和空間復雜度了。
思考:學習每個知識之前都應該要考慮一下為什么要學習,學了有什么用處,什么場景下去用。
2、算法的效率高通常是指算法的運行時間,度量一個算法的運行時間有2種方式:
- 事后統計法:須要編寫測試程序。萬一不好花費大量的時間精力,賠了娘子又折兵(而且測試環境不同區別不是一般的大)
- 事前統計法:程序編寫前,使用統計方法對算法進行估算
思考:百度搜索事前避孕藥和事后避孕藥,會有更深刻的理解
3、一個高級語言編寫的程序在計算機上執行時所消耗的時間取決于下列因素:
- 算法採用的策略,方案(方法思路)
- 編譯產生的代碼質量(編譯器的優劣,編譯語言的優劣)
- 問題的輸入規模(輸入量的多少,須要一個循環)
- 機器運行指令的速度(硬件環境)
4、我們研究算法的復雜度,側重的是研究算法隨著輸入規模擴大增長量的一個抽象。而不是精確地定位須要運行多少次。
由于假設這種話,我們就又不得不考慮編譯器優化的問題。然后就沒然后了。
思考:由于外部因素的影響非常大。非常難精確定位運行次數。那就對增長量抽象出來進行對照未嘗不是一個好的方案。
5、怎樣對增長量進行抽象:忽略程序所用的語言、忽略程序跑在什么樣的機器上、不計哪些循環索引的增長和循環終止條件、變量聲明、打印結果。
我們僅僅關心它所實現的算法。
思考:分析程序的執行時間,最重要的是把程序看成獨立于編程語言的算法或者一系列的步驟。
6、我們在分析一個算法的執行時間時:重要的是把基本操作的數量和輸入模式關聯起來。
思考:分析隨著輸入量的添加。操作數量的增長情況用以推斷算法效率高低。
7、函數的漸進增長:對于給定的兩個函數f(n)和g(n),假設存在一個整數N,使得對于全部的n>N。f(n)總是比g(n)大,那么。我們說f(n)的增長漸進快于g(n)。與最高次項線程的常熟并不重要,也能夠忽略。常數也能夠忽略。推斷一個算法的好不好。僅僅通過少量的數據是不能夠推斷的。以免以偏概全。
思考:推斷算法效率是,函數中的常熟和其它次要項經常能夠忽略,而更應該關注主項(也就是最高項)的階數
轉載于:https://www.cnblogs.com/bhlsheji/p/5370631.html
總結
以上是生活随笔為你收集整理的时间复杂度和空间复杂度[数据结构]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【坑】执行Consumer的时候发生ja
- 下一篇: 关于phpcmsv9更新缓存出现链接被重