演算法簡介
程式和演算法的時間複雜度
1.一個程式或演算法的時間效率,也稱“時間複雜度”,有時簡稱“複雜度”
2.複雜度常用大寫字母O和小寫字母n來表示,比如O(n),O(n²)等,n代表問題的規模
3.時間複雜度是用演算法執行過程中,某種時間固定的操作需要被執行的次數和n的關係來度量的,在無序數列中查詢某個數,複雜度是O(n)
4.計算複雜度的時候,只統計執行次數最多的(n足夠大時)那種固定操作的次數,比如某個演算法需要執行加法n²次,除法n次,那麼就記其複雜度是O(n²)
5.複雜度有“平均複雜度”和“最壞複雜度”兩種,兩者可能一致,也可能不一致
例如:順序查詢,平均複雜度為n/2,最壞複雜度為n,複雜度都為O(n),注意這裡不計係數
快速排序,平均複雜度n*log n,最壞複雜度為n²
6.如果複雜度是多個n函式的和,只關心隨n增長增長速度最快的那個函式
7.常見的大O執行時間
O(log n),對數級,包括二分查詢
O(n),線性級,包括簡單查詢即順序查詢
O(n*log n),線性對數級,快速排序
O(n²),平方級,選擇排序,氣泡排序,插入排序
O(nª),多項式級,基於n的a層迴圈
O(n!),階乘級,旅行商問題
二分查詢
例:
A有一個1~100的數,B來猜,可以提問,A只能回答對和錯,要以最少次數猜到這個數字
1.是1嗎?是2嗎?。。。是99嗎?平均要問50次
2.大於50嗎?大於75嗎?。。。每次縮小範圍到一半,7次以內就能猜到
此時二分查詢的簡單程度顯而易見
簡單查詢時間複雜度為O(n),二分查詢時間複雜度為O(log n)
但請注意,二分查詢前提條件是查詢的數列必須是有序的
下面來寫一個程式描述上述過程:
最後提一下旅行商問題
大概就是一個旅行商需要前往5個城市,同時要確保旅程最短
為此,可以考慮前往這些城市的各種可能性
對於每種順序,他都計算總旅程,再挑選出旅程最短的線路
顯然,5個城市有5!=120種不同的排列方式
推而廣之,n個城市需要執行n!次操作才能計算出結果
因此執行時間為O(n!),這種演算法時間複雜度非常糟糕
相關文章
- RSA演算法簡介演算法
- LRU演算法簡介演算法
- 雜湊演算法簡介演算法
- 向量時鐘演算法簡介演算法
- 常見國密演算法簡介演算法
- 協同過濾演算法簡介演算法
- 人工智慧常見演算法簡介人工智慧演算法
- 期望最大化演算法(EM)簡介演算法
- MD5加密演算法簡介 (轉)加密演算法
- Qtum研究院:Cuckoo Cycle演算法簡介QT演算法
- Relief 特徵選擇演算法簡單介紹特徵演算法
- 演算法與資料結構——圖簡介演算法資料結構
- 資料結構與演算法——AVL樹簡介資料結構演算法
- 資料結構與演算法——RB樹簡介資料結構演算法
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- 部分聚類演算法簡介及優缺點分析聚類演算法
- kmp 演算法簡介及 next 陣列推導KMP演算法陣列
- 快取、快取演算法和快取框架簡介快取演算法框架
- 簡介
- Jira使用簡介 HP ALM使用簡介
- 快取演算法:LRU、LFU、隨機替換等常見演算法簡介快取演算法隨機
- 紙上談兵: 排序演算法簡介及其C實現排序演算法
- 自動駕駛中的機器學習演算法簡單介紹 - Haltakov自動駕駛機器學習演算法
- 關聯規則分析 Apriori 演算法 簡介與入門演算法
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- RSA加密演算法簡單介紹以及python實現加密演算法Python
- BookKeeper 介紹(1)--簡介
- Amphenol簡介
- Vagrant簡介
- PySimpleGUI 簡介GUI
- Protobuf簡介
- MyBatis 簡介MyBatis
- jango簡介Go
- cookie 簡介Cookie
- Session 簡介Session
- Cookie簡介Cookie
- Virgilio 簡介
- Django簡介Django