演算法導論,一章二小節 ,分治演算法
defmerge(a,p,q,r):
"%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):
"%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
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...