時間複雜度並不是表示乙個程式解決問題需要花多少時間,而是當程式所處理的問題規模擴大後,程式需要的時間長度對應增長得有多快。
也就是說,對於某乙個程式,其處理某乙個特定資料的效率不能衡量該程式的好壞,而應該看當這個資料的規模變大到數百倍後,程式執行時間是否還是一樣,或者也跟著慢了數百倍,或者變慢了數萬倍。
不管資料有多大,程式處理所花的時間始終是那麼多的,我們就說這個程式很好,具有o(1)的時間複雜度,也稱常數級複雜度;
資料規模變得有多大,花的時間也跟著變得有多長,比如找n個數中的最大值這個程式的時間複雜度就是o(n),為線性級複雜度,
而像氣泡排序、插入排序等,資料擴大2倍,時間變慢4倍的,時間複雜度是o(n^2),為平方級複雜度。
還有一些窮舉類的演算法,所需時間長度成幾何階數**,這就是o(a^n)的指數級複雜度,
甚至o(n!)的階乘級複雜度。
不會存在 o(2*n^2)的複雜度,因為前面的那個"2"是係數,根本不會影響到整個程式的時間增長。
同樣地,o(n^3+n^2)的複雜度也就是o(n^3)的複雜度。
因此,我們會說,乙個 o(0.01*n^3)的程式的效率比 o(100*n^2)的效率低,儘管在n很小的時候,前者優於後者,但後者時間隨資料規模增長得慢,最終o(n^3)的複雜度將遠遠超過o(n^2)。
我們也說,o(n^)的複雜度小於o(1.01^n)的複雜度。
容易看出,前面的幾類複雜度被分為兩種級別,其中後者的複雜度無論如何都遠遠大於前者。
像另一種像是
當我們在解決乙個問題時,我們選擇的演算法通常都需要是多項式級的複雜度,非多項式級的複雜度需要的時間太多,往往會超時,除非是資料規模非常小。
dfs時間複雜度 時間複雜度 空間複雜度
時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...