保留時間用什麼表示
演算法的好與壞
衡量演算法的標準有很多,其中最主要的兩種是時間複雜度和空間複雜度。
由於受輸入規模和環境的影響,我們無法估計準確的時間耗費和空間耗費,但我們可以根據程式碼來預估執行的大概時間和大概空間。
1、基本操作執行次數Tn
將每條程式碼執行的時間都設定為單位時間,計算程式最終執行的大致時間。
2、漸進時間複雜度
如果只用基本執行操作次數Tn來表示程式執行的大致時間,會存在一定的理論不足,因為我們無法確定n到底執行了多少次,自然無法估計哪一中演算法更快。
因此,為了解決這個難題,有了漸進時間複雜度的概念。
漸進時間複雜度的官方定義:
若存在函式fn,使得n趨於無窮大的時候,Tn/fn的極限值為不等於0的常數時,則稱fn是Tn的同數量級函式。記作Tn=O(fn),稱為O(fn),O為演算法的漸進時間複雜度,簡稱為時間複雜度。
這就是廣為人知的大O表示法。
理解:實際上就是將基本執行操作次數Tn的n設定為無窮大,求其最簡化形式的同數量級函式。
3、推導時間複雜度的幾個原則
因為大O表示法求的是當n趨於無窮大時,其執行次數的最簡化形式的同數量級函式。因此,需要遵循一些原則:
如果執行的時間是常數量級,則用常數1表示
只保留時間函式中的最高階項
如果最高階項存在,則省去最高階項前面的係數
舉例:
Tn =3 等價於Tn=O(1)
Tn=3n 等價於Tn=O(n)
Tn=5lgn等價於Tn=O(lgn),注意這裡的lgn是省略掉了底數2
Tn=n*n*0。5+n等價於Tn=O(n*n)
這裡我們涉及到了4種經典的時間複雜度,O(1),O(n),O(lgn),O(n*n),當n足夠大的時候,演算法的執行時間為:
O(1)