算法导论学习笔记(1)

本文介绍了算法导论的学习资源,包括网易公开课上的课程链接。详细解释了算法的运行时间分析方法,如最坏情况分析、平均情况分析及渐进分析,并通过插入排序和归并排序的示例,展示了算法的时间复杂度分析过程。提供了Python代码实现,比较了两种排序算法的运行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习资源:网易公开课:算法导论

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]
>>> 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值