演算法
解決特定問題的方案
一、衡量演算法的好壞
(1) 時間複雜度
演算法執行的時候執行規模、頻度。
最好執行次數、平均執行次數、最壞執行次數(為準)
常數時間複雜度:在任何時刻訪問時間複雜度都是一致的。o(1)
x=1y=2
o(n): 根據n的大小變化的時間複雜度
一層迴圈就是o(n)
n=5for i in range(n):
pass
o(n^2):巢狀迴圈
for i in range(n):
for j in range(n-2):
pass
o(logn):log2為底 n的對數 ,當迴圈的次數在迴圈中折半
while n!=0:
print(n)
n=n//2
常用時間複雜度的排序
o(1)二、查詢
查詢:順序查詢、折半查詢
(1) 順序查詢
從前到後,順序進行與關鍵字相匹配的查詢
時間複雜度o(n)
def search(li,key):
for index,i in enumerate(li):
if i==key:
return index
return -1
print(search([1,2,3,44,5,77,88],44))
(2) 折半查詢
選擇中間的元素進行比較,每次排除一半的元素
時間複雜度 o(logn)
折半查詢必須要在已排序的基礎上進行
"""key比較中間的元素mid
if key >mid: 捨棄左半部分,取右半部分,繼續查詢
else : 捨棄右半部分,區左半部分,繼續查詢
""""""
捨棄左半部分: start: mid+1 end 不變
捨棄右半部分: start: 不變 end mid-1
"""def middlesearch(li,key):
start=0
end=len(li)-1
while start<=end:
mid=(start+end)//2
if key>li[mid]:
start=mid+1
elif key三、排序
按照穩定性上:穩定排序和不穩定排序
3 4 5(1) 6 -9 -1 5(2) -9 -1 3 4 5(1) 5(2) 6
1. 氣泡排序
最重要的排序方法
思路:將相鄰的兩個元素進行比較 i i+1 , 通過比較來決定是否交換位置。
每一次排序都會選出乙個(最大)最小值。
li=[23,-8,29,2,6,18,33]
內迴圈---外迴圈
def bublesort(li):
n=len(li)-1
for j in range(n):
for i in range(n-j):
if li[i]>li[i+1]:
li[i],li[i+1]=li[i+1],li[i]
print(li)
bublesort(li)
時間複雜度:o(n^2) 最佳時間複雜度(o(n))
穩定性:穩定排序
2. 選擇排序
思路:每次選擇乙個最小或者最大的的元素放在前面,排好序。
li=[23,-8,29,2,6,18,33]
min_value=0
li_temp=
for i in li:
if i==0:
min_value=li[0]
else:
if i=0 and temp=0 and templi[i]:
else:
return quicksort(small)+[li[mid_index]]+quicksort(big)
li=[-9 ,-20 , -100, 10 , 3 ,-110 , 7 , -5,7]
print(quicksort(li))
時間複雜度:o(n^2)
穩定性:穩定
6.歸併排序
分久必合,合久必分。
def merage(li,low,high):
if low mid=(low+high)//2
merage(li,low,mid)
merage(li,mid+1,high)
_merage_sort(li,low,mid,high)
return li
def _merage_sort(li,low,mid,high):
i=low i是左半部分的第乙個元素
j= mid+1 j是右半部分的第乙個元素
temp=
while i<=mid and j<=high:
if li[i]<=li[j]:
i+=1
else:
j+=1
while j<=high: 左邊被取完了
j+=1
while i<=mid: 右邊被取完
i+=1
li[low:high+1]=temp
li=[-9 ,-20 , -100, 10 , 3 ,-110 , 7 , -5,7]
print(merage(li,0,len(li)-1))
時間複雜度:o(nlogn)
穩定性:穩定排序
第十五周學習筆記
配分函式z z theta z 是概率分布的歸一化因子,一些概率模型中可以被設計成無需計算歸一化常數,而有些則必須直面計算歸一化因子的問題 p x 1z p x p x theta dfrac hat x theta p x z 1 p x 1.對數似然梯度 通過最大似然學習無向模型特別困難的原因在...
python第十五天
什麼是模組?一系列功能的集合 定義模組?建立乙個py檔案就是乙個模組,該py檔名就是模組名 怎麼使用模組?在要是用的模組檔案中通過import 模組名 來匯入模組 模組的四種方式?1 編譯執行模組所對應的py檔案,形成對應的pyc檔案 2 產生該模組自己的全域性命名空間 3 在適應該模組的全域性命名...
python筆記第十五章之回顧
sql小結 create table student sno char 8 sname char 10 s char 2 sage smallint,major char 20 insert into student sno,sname,s sage,major values 20100001 cj...