学习资源:网易公开课:算法导论
http://open.163.com/special/opencourse/algorithms.html
运行时间:输入本身、输入size、want 运行时间上界
分析方法:1、worst-case analysis(usually): T(n):maximium time on any input of size n
Depends on computer:-------relative speed(same machine)/absolute speed(different)
2、average-case(sometime):T(n):期望时间
3、best-case analysis(bogus(假象))
渐进分析(asymptotic analysis):忽略机器常量影响、关注增长as n->∞
渐进符号
theta符号θ:放弃低阶项、忽略常数因子:3n3+90n2-5n+81=θ(n3)
插入排序 T(n)=nΣ(j=2) θ(j)=θ (n2)
merge sort归并排序:递归树
示例程序(python):
import datetime
a=[25,54,56,987,8,5,2,6,9,13,32,34,76,3,1,9898,23,234,555543,75,4]
b=[25,54,56,987,8,5,2,6,9,13,32,34,76,3,1,9898,23,234,555543,78,4]
i=1
starttime = datetime.datetime.now()
while i<len(a):
j=i
while j-1>=0:
#print(j-1,j)
if a[j-1]>a[j]:
tmp=a[j-1]
a[j-1]=a[j]
a[j]=tmp
j-=1
i+=1
#output
endtime = datetime.datetime.now()
print("insert sort cost time:",endtime - starttime)
print(a)
def merge(seq):
if len(seq)==1:
#print(seq)
return seq
seq1=merge(seq[0:int(len(seq)/2)])
seq2=merge(seq[int(len(seq)/2):])
ll=list()
i=j=0
while True:
if i==len(seq1) and j==len(seq2):
return ll
elif i==len(seq1):
ll.append(seq2[j])
j+=1
elif j==len(seq2):
ll.append(seq1[i])
i+=1
elif seq1[i]<seq2[j]:
ll.append(seq1[i])
i+=1
elif seq2[j]<seq1[i]:
ll.append(seq2[j])
j+=1
starttime = datetime.datetime.now()
bb=merge(b)
endtime = datetime.datetime.now()
print("merge sort cost time:",endtime - starttime)
print(bb)
running example:
insert sort cost time: 0:00:00
[1, 2, 3, 4, 5, 6, 8, 9, 13, 23, 25, 32, 34, 54, 56, 75, 76, 234, 987, 9898, 555543]
merge sort cost time: 0:00:00
[1, 2, 3, 4, 5, 6, 8, 9, 13, 23, 25, 32, 34, 54, 56, 76, 78, 234, 987, 9898, 555543]
>>>