sf-1 算法
算法基礎
算法
算法(Algorithm):一個計算過程,解決問題的方法
DNiklaus Wirth:“程序=數據結構+算法”
時間復雜度
時間復雜度:用來評估算法運行效率的一個式子
?
?
時間復雜度-小結
時間復雜度是用來估計算法運行時間的一個式子(單位)。
一般來說,時間復雜度高的算法比復雜度低的算法慢。
常見的時間復雜度(按效率排序)
O(1)< O(logn)< O(n)< O(nlogn)< O(n2)< O(n2logn)< O(n3)
復雜問題的時間復雜度
O(n!)O(2n)O(nn)..
如何簡單快速地判斷算法復雜度
快速判斷算法復雜度(適用于絕大多數簡單情況):
確定問題規模n
循環減半過程→logn
k層關于n的循環→nk
復雜情況:根據算法執行過程判斷
空間復雜度
空間復雜度:用來評估算法內存占用大小的式子
空間復雜度的表示方式與時間復雜度完全一樣
算法使用了幾個變量:O(1)
算法使用了長度為n的一維列表:O(n)
算法使用了m行n列的二維列表:O(mn)
“空間換時間”
遞歸的兩個特點:
調用自身
結束條件
?
?遞歸實例:漢諾塔問題
大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序擺著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
64根柱子移動完畢之日,就是世界毀滅之時。
?
漢諾塔移動次數的遞推式:h(x)=2h(x-1)+1
h(64)=18446744073709551615
假設婆羅門每秒鐘搬一個盤子,則總共需要5800億年!
列表查找
查找
查找:在一些數據元素中,通過一定的方法找出與給定關鍵字相同的數據元素的過程。
列表查找(線性表查找):從列表中查找指定元素
輸入:列表、待查找元素
輸出:元素下標(未找到元素時一般返回None或-1)
內置列表查找函數:index()
順序查找(Linear Search)
順序查找:也叫線性查找,從列表第一個元素開始,順序進行搜索,直到找到元素或搜索到列表最后一個元素為止。
時間復雜度:O(n)
?
二分查找(Binary Searh)
二分查找:又叫折半查找,從有序列表的初始候選區li[0:n]開始,通過對待查找的值與候選區中間值的比較,可以使候選區減少一半。
def binary(data_list, value):low = 0high = len(data_list) - 1while low <= high:mid = (low + high) // 2 # 折半if data_list[mid] == value:return midelif data_list[mid] > value:high = mid - 1else:low = mid + 1data_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] value = 5 index = binary(data_list, value) print("index in data_list:%s ,search value test:%s "%(index,data_list[index]))""" index in data_list:4 ,search value test:5 """總結
- 上一篇: sjms-1 面向对象
- 下一篇: nginx之Geoip读取地域信息模块