算法簡(jiǎn)介

程序和算法的時(shí)間復(fù)雜度

1.一個(gè)程序或算法的時(shí)間效率,也稱“時(shí)間復(fù)雜度”,有時(shí)簡(jiǎn)稱“復(fù)雜度”
2.復(fù)雜度常用大寫字母O和小寫字母n來表示,比如O(n),O(n2)等,n代表問題的規(guī)模
3.時(shí)間復(fù)雜度是用算法運(yùn)行過程中,某種時(shí)間固定的操作需要被執(zhí)行的次數(shù)和n的關(guān)系來度量的,在無序數(shù)列中查找某個(gè)數(shù),復(fù)雜度是O(n)
4.計(jì)算復(fù)雜度的時(shí)候,只統(tǒng)計(jì)執(zhí)行次數(shù)最多的(n足夠大時(shí))那種固定操作的次數(shù),比如某個(gè)算法需要執(zhí)行加法n2次,除法n次,那么就記其復(fù)雜度是O(n2)
5.復(fù)雜度有“平均復(fù)雜度”和“最壞復(fù)雜度”兩種,兩者可能一致,也可能不一致

例如:順序查找,平均復(fù)雜度為n/2,最壞復(fù)雜度為n,復(fù)雜度都為O(n),注意這里不計(jì)系數(shù)
快速排序,平均復(fù)雜度n*log n,最壞復(fù)雜度為n2

6.如果復(fù)雜度是多個(gè)n函數(shù)的和,只關(guān)心隨n增長(zhǎng)增長(zhǎng)速度最快的那個(gè)函數(shù)
7.常見的大O運(yùn)行時(shí)間

O(log n),對(duì)數(shù)級(jí),包括二分查找
O(n),線性級(jí),包括簡(jiǎn)單查找即順序查找
O(n*log n),線性對(duì)數(shù)級(jí),快速排序
O(n2),平方級(jí),選擇排序,冒泡排序,插入排序
O(na),多項(xiàng)式級(jí),基于n的a層循環(huán)
O(n!),階乘級(jí),旅行商問題

二分查找

例:
A有一個(gè)1~100的數(shù),B來猜,可以提問,A只能回答對(duì)和錯(cuò),要以最少次數(shù)猜到這個(gè)數(shù)字

1.是1嗎?是2嗎?。。。是99嗎?平均要問50次
2.大于50嗎?大于75嗎?。。。每次縮小范圍到一半,7次以內(nèi)就能猜到

此時(shí)二分查找的簡(jiǎn)單程度顯而易見
簡(jiǎn)單查找時(shí)間復(fù)雜度為O(n),二分查找時(shí)間復(fù)雜度為O(log n)
但請(qǐng)注意,二分查找前提條件是查找的數(shù)列必須是有序的
下面來寫一個(gè)程序描述上述過程:

最后提一下旅行商問題

大概就是一個(gè)旅行商需要前往5個(gè)城市,同時(shí)要確保旅程最短
為此,可以考慮前往這些城市的各種可能性
對(duì)于每種順序,他都計(jì)算總旅程,再挑選出旅程最短的線路
顯然,5個(gè)城市有5!=120種不同的排列方式
推而廣之,n個(gè)城市需要執(zhí)行n!次操作才能計(jì)算出結(jié)果
因此運(yùn)行時(shí)間為O(n!),這種算法時(shí)間復(fù)雜度非常糟糕

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容