Python筆記整理15 第十五章 演算法

2021-09-13 01:31:25 字數 2778 閱讀 2404

演算法

解決特定問題的方案

一、衡量演算法的好壞

(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...