程序员数学基础【二、时间复杂度】(Python版本)
測試使用語言:【Python】
由于此類語言入門非常容易,哪怕初中生亦可以,并且本科/研究生寫論文、做實驗多數所用語言都是【Python】故而選擇此語言。
代碼運行平臺:【win10 x64】
代碼環境安裝:【https://blog.csdn.net/feng8403000/article/details/113784766】
代碼編碼格式:【https://blog.csdn.net/feng8403000/article/details/113785344】
完整的vs搭建并使用【Python】,非常簡單,基礎部分無需任何環境配置,工具自帶即可。
一、時間頻度:
一個算法花費的時間與算法中語句的執行次數成比例,哪個算法中語句執行的次數多,它花費時間就多。
一個算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
在計算時間頻度時,常數項和低次項可以忽略,因為隨著n變大,時間頻度會無限接近。
例如:從1++++++100的結果5050,利用等差數列公式計算的會飛快
import time #累計1至1億的總和 start=1 end=100000000 #暴力運算 starttime = time.time()#開始 result=0 for x in range(start,end+1):result+=x endtime = time.time()#結束 print("暴力運算結果:{0},消耗時間:{1}".format(result,(endtime - starttime)))#等差數列 starttime1 = time.time()#開始 result1=end*(end+1)//2 endtime1 = time.time()#結束 print("等差數列求和公式結果:{0},消耗時間:{1}".format(result1,(endtime1 - starttime1)))分析:
循環從1-1億一共1億次,需要再判斷一回才能退出。
算法2:result=(1+end)*end/2(這個是等差數列求和公式:(a1+an)*n/2)一步到位?T(n)=1
二、時間復雜度
1.時間復雜度:
1)一般情況下,算法中的基本操作語句的重復執行次數是時間規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨于無窮大時,T(n)/f(n)的極限值是一個不等于0的常數,則稱f(n)是T(n)的同量級函數,記做T(n)=O(f(n)),稱O(f(n))為算法的漸進時間復雜度,簡稱時間復雜度。
2)T(n)不同,但時間復雜度可能相同,如T(n)=n2+7n+6與T(n)=3n2+2n+2,他們的T(n)不同,但時間復雜度相同,都為O(f(n))。
3)計算時間復雜度的方法
√ 常用常數1代替運行時間中的加法常數 如?T(n)=n2+7n+6==>?T(n)=n2+7n+1
√ 修改后的運行次數函數中,只保留最高階項??T(n)=n2+7n+1==>?T(n)=n2
√ 去除最高階項的系數 ?T(n)=n2==>?T(n)=n2==>O(n2)
2.常見的時間復雜度:
1)無循環條件下常數階 O(1) 最穩定
2)對數階 如O(log2n)
3)線性階 O(n)
4)線性對數階 O(nlog2n) —線性階*對數階
5)平方階 O(n2)?? 線性階*線性階? ?兩層n循環
6)立方階 O(n3) 三層n循環
7)k次方階 O(nk)
8)指數階 O(2n) 執行慢(指數爆炸)
說明:
○常見的時間算法時間復雜度從(1)到(8)越來越復雜,隨著n的增大,時間復雜度不斷增大,算法的執行效率越來越低(O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2) <O(n3)?<O(nk)<O(2n)<O(n)!<O(nn))—簡單記法:長對冪指階
○我們應該盡可能避免(8)指數階的算法
3.時間復雜度的規則
1)加法規則? T(n)=T1(n)+T2(n)=O(f(n)+O(g(n)=O(max(O(f(n),O(g(n)) 多項式相加,只保留最高的階,且系數變為1
2)乘法規則? T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))? 多項相乘,都保留
三、平均時間復雜度與最壞時間復雜度
1)平均時間復雜度是指所有有可能的輸入實例均以等概率出現的情況下,該算法的運行時間
2)最壞情況下的時間復雜度是在算法在任何輸入實例上運行的界限,就保證了算法的運行時間 不會比最壞情況更長
?
4、總結:
a)、通過時間復雜度我們就可以計算出我們的代碼效率如何,在后期代碼優化上起到證明的作用。
下篇內容:
程序員數學基礎【三、取模運算(取余運算功能重疊部分)】(Python版本)
【https://blog.csdn.net/feng8403000/article/details/114194267】
萬丈高樓平地起,程序員數學基礎,從小學的【什么是數學】至【離散數學】(主要是圖論)咱們一步步成長,共同加油。
總結
以上是生活随笔為你收集整理的程序员数学基础【二、时间复杂度】(Python版本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员数学基础【一、基础运算符号(整数、
- 下一篇: 程序员数学基础【三、取模运算(取余运算功