跟我一起學 演算法導論 分治演算法

2021-09-22 12:12:53 字數 1527 閱讀 3717

演算法導論,一章二小節 ,分治演算法

defmerge(a,p,q,r):

print

"%s:%s - %s:%s"%

(p,q+1

,q+1,r

+1)if

p==q : l 

=[a[p],

10**10]

else

: l 

=a[p:q+1

]+[10**10]if

q+1==

r : r 

=[a[r],

10**10]

else

: r 

=a[q+1

:r+1]

+[10*10]i =

j =0for

k in

xrange(p,r+1

):if

l[i]

<

r[j] :

a[k]

=l[i]i+=

1else

:a[k]

=r[j]j+=

1#print "%s:%s = %s \n%s:%s = %s\n\n%s" % ( p,q, l , q+1,r,r, a)

defdebugging(a,p,q,r,c):

print

"%s\t%s:%s - %s:%s"%

(c,p,q,q+1

,r)def

merge_sort(a,p,r,c=1

):if

p<

r:q =(p

+r)/2

merge_sort(a,p,q,c+1

)merge_sort(a,q+1

,r,c+1

)#debugging(a,p,q,r,c)

merge(a,p,q,r)a=

[5,2

,7,4

,1,3

,2,6

]print

amerge_sort(a,0,len(a)-1

)printa

結果輸出》

python 2f.py

[5, 2, 7, 4, 1, 3, 2, 6]

[1, 2, 2, 3, 4, 5, 6, 7]

分享些細節:演算法並不難,但確實寫了很久,除錯讓我很鬱悶。

直到寫了 def 

debugging  

目測:python 2f.py

30:0 -1

:132

:2-3

:320:

1-2:

334:

4-5:

536:

6-7:

724:

5-6:

710:3

-4:7

看 每層 對陣列的 陣列下標取值 : 

在 python 中當 

arr = [1,2,3,4] 我希望能取出 [2,3] 是 arr[1:3] 是最後一位不計算在內的

最典型的  arr[0,1]  == [1]

跟我一起學 - 演算法導論 - 分治演算法

跟我一起學 演算法導論 堆

encoding utf 8 遞迴 單條路 自下往上排序 defheap adjust data,s,m if2 s m return 宣告 預設父節點位置 temp s 1 左 子節點值 大於 父節點值 預設父節點位置 為 左子節點位置 ifdata 2 s 1 data temp temp 2 ...

跟我一起學演算法 分治法

目錄 應用2 快速排序 參考分治法 divide and conquer 對於具備以下特點的問題 分治法所能解決的問題一般具有以下幾個特徵 該問題的規模縮小到一定的程度就可以容易地解決 該問題可以分解為若干個規模較小的相同問題,即該問題具有最優子結構性質 利用該問題分解出的子問題的解可以合併為該問題...

跟我一起學 演算法導論 函式的增長

3.1 漸近號 漸近範圍 f n g n a b 漸近上界 f n g n a b 0 f n cg n 漸近下界 f n g n a b 0 cg n f n 非漸近上界 f n o g n alim n f n g n 0 非漸近下界 f n g n a b 0 cg n lim n f n g...