资源简介 (共16张PPT)结据数构5.1 数据结构与算法的关系与算法问题提出1+2+3+……+100=?1+2+3+……+n=?(n>0)n=int(input("你输入问题规模n:"))s=(1+n)*n/2print ("1+2+……+n的结果是:",str(s))n=int(input("你输入问题规模n:"))s=0for i in range(1,n+1):s=s+iprint ("1+2+……+n的结果是:",str(s))VS运行结果一致,算法思想等有什么差别?顺序结构循环结构算法1语句执行次数共:3次算法2语句执行次数共:2*n+3次1次1次1次1次1次n次n次1次一、算法效率n=int(input("你输入问题规模n:"))s=(1+n)*n/2print ("1+2+……+n的结果是:",str(s))算法1: t(n)=3n=int(input("你输入问题规模n:"))s=0for i in range(1,n+1):s=s+iprint ("1+2+……+n的结果是:",str(s))算法2: t(n)=2*n+3导入时间模块,记录运行时间,比较算法对应程序的执行次数与执行时间的关系import timen=int(input("你输入问题规模n:"))starttime = time.time()s=(1+n)*n/2print ("1+2+……+n的结果是:",str(s))endtime = time.time()dtime = endtime - starttimeprint(“算法1运行时间:%.8s s" % dtime)算法1和算法2运行次数和时间比较表算法1t(n)=3运行时间稳定算法2 t(n)=2*n+3运行时间与n成正比n=int(input("你输入问题规模n:"))s=0;c=0for i in range(1,2*n+2,2):s=s+ic=c+1print ("1+3+……+2*n+1的结果是:",str(s))算法3: t(n)=3*n+41次2次n次n次n次1次算法3 t(n)=3*n+4运行时间与n成正比二、算法效率的表示时间是衡量效率的重要方面,算法执行所需要的时间用时间复杂度来反应执行算法相应程序的时间与语句执行次数成正比(忽略其他硬软件设施)算法执行所占用的存储空间也需要考虑,用空间复杂度来反应,硬件进步考虑较少算法效率时间复杂度空间复杂度算法的时间复杂度由程序基础语句的执行次数可推得三、时间复杂度的大o阶记法算法1t(n)=3运行时间稳定算法2 t(n)=2*n+3运行时间与n成正比算法3 t(n)=3*n+4运行时间与n成正比O(1)O(n)O(n)算法4 t(n)=n2+5运行时间与n成正比O(n2)算法5 t(n)=3*n2+5运行时间与n成正比O(n2)常数阶线性阶线性阶平方阶平方阶三、时间复杂度的大o阶记法O(n2)n=int(input("你输入问题规模n:"))s=0;c=0for i in range(1,n+1):for j in range(1,n+1):s=s+iprint ("结果是:",str(s))算法6: t(n)=2*n*n+n+4n=int(input("你输入问题规模n:"))s=0;c=0for i in range(1,n+1):for j in range(1,i+1):s=s+iprint ("结果是:",str(s))算法7: t(n)=n*n+2*n+4O(n2)程序执行次数转换为算法时间复杂度规则:1.只保留最高阶;2.与高阶相乘的常数去除;3.只有常数则用1取代1次2次n次n*n次n*n次1次1次2次n次1+2+……n次1+2+……n次1次O(1)n=int(input("你输入问题规模n:"))s=0;c=0if s>c:print ("结果是:",str(s))else:print ("结果是:",str(c))算法8: t(n)=5n=int(input("你输入问题规模n:"))s=0;c=0for i in range(1,n+1):if s>c:print ("结果是:",str(s))else:print ("结果是:",str(c))print ("结果是:",str(s))算法9: t(n)=3*n+4O(n)程序执行次数转换为算法时间复杂度规则:1.只保留最高阶;2.与高阶相乘的常数去除;3.只有常数则用1取代三、时间复杂度的大o阶记法O(log2n)n=int(input("你输入问题规模n:"))s=0;i=1while i<=n:s=s+1i=i*2print ("结果是:",str(s))算法10: 关注循环体执行次数即可i=1i=2i=4i=8i=16i=n……循环体执行次数:log2n对数阶O(1)O(n)O(n2)O(log2n)三、时间复杂度的大o阶记法O(n3)O(2n)O(n!)常见算法时间复杂度耗时比较算法的时间复杂度在很大程度上能很好的反映出算法的优劣。设计算法时,尽量减少循环的嵌套,减少基础语句运行次数。算法效率时间复杂度空间复杂度大O阶记法有具体程序则看语句执行次数关注算法的循环次数总结四、数据结构对算法效率的影响数据结构的设计和选择关注:数据的逻辑结构、存储结构以及基本操作算法的设计和选择更多关注:如何在数据结构的基础上综合运用各种基本数据操作来解决实际问题算法和数据结构设计皆为最终解决问题服务算法是编程思想,数据结构则是这些思想的基础四、数据结构对算法效率的影响数据结构 逻辑结构 存储结构 基本操作数组 确定 连续 增、删、改、查链表 明确的 不连续 增、删、改、查查看第n个元素的时间复杂度 插入、删除元素时间复杂度数组链表d[0]d[1]d[2]d[3]d[4]d[5]“赵”“钱”“孙”“李”“周”“吴”d[3]“郑”新数据插入位置data3nulldata1nextnewnextdata2nextO(1)O(n)O(n)O(1)实践探索import timen=int(input("你输入问题规模n:"))starttime = time.time()s=(1+n)*n/2print ("1+2+……+n的结果是:",str(s))endtime = time.time()dtime = endtime - starttimeprint("程序运行时间:%.8s s" % dtime)import timen=int(input("你输入问题规模n:"))starttime = time.time()s=0for i in range(1,n+1):s=s+iprint ("1+2+……+n的结果是:",str(s))endtime = time.time()dtime = endtime - starttimeprint("程序运行时间:%.8s s" % dtime)上机运行,体会程序的运行时间观谢谢看 展开更多...... 收起↑ 资源预览