资源简介 (共18张PPT)5.1 数据结构与算法效率数据结构概念及类型常见类型:数组、链表、队列、栈、树和图等数据结构指的是数据之间的相互关系,即数据组织形式。包括:逻辑结构、存储结构、基本操作(数据运算)对算法效率产生一定的影响各有特点5.1 数据结构与算法效率5.1.1 算法效率时间复杂度空间复杂度算法复杂度学习任务通过阅读书本116页5.1.11、认识: “时间复杂度”、“空间复杂度”2、回答下面问题思考并回答下面两个算法,哪一个的时间复杂度更大n=int(input())s=(1+n)*n/2print (s)n=int(input())s=0for i in range(1,n+1):s=s+iprint (s)时间复杂度与渐近时间复杂度时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数,T(n)渐进时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级,O(n)当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此,在算法分析时,往往对两者不予区分,经常是将渐近时间复杂度O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。不包括T(n)函数的低阶项和首项系数?时间复杂度与渐近时间复杂度n=int(input())s=(1+n)*n/2print (s)N趋近于无穷大时,程序仍然只执行三次,是一个定值,用常数1代替运行时间中所有加法常数O(1)n=int(input())s=0for i in range(1,n+1):s=s+iprint (s)N趋近于无穷大时,2*n+3中的3可以省略,而两倍的影响也将减小如果最高阶项存在且不是1,那么去除与这个项相乘的常数O(n)练一练请计算下面算法的时间复杂度O()n=int(input())s=0for i in range(1,4):for j in range(1,n+1):s=s+iprint (s)n=int(input())s=0for i in range(1,n+1):for j in range(1,n+1):s=s+iprint (s)空间复杂度空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如:s=[0]*100for i in range(0,100):temp = i定义了有100个元素的数组,所以空间复杂度100*O(1)temp=0for i in range(1,n+1):temp = i定义了一个temp,所以空间复杂度1*O(1)定义一个或多个变量,空间复杂度都是为1列表的空间复杂度为列表的长度空间复杂度空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如:a = ”Python” # 空间复杂度为1num = [1, 2, 3, 4, 5] # 空间复杂度为5num = [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] # 空间复杂度为5*4num = [[[1, 2], [1, 2]], [[1, 2], [1, 2]] , [[1, 2], [1, 2]]] # 空间复杂度为3*2*2空间复杂度空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如:def fac(n):if n==0:s=1else:s=n*fac(n-1)return s递归算法通过反复调用,创建了多个临时存储空间,其空间复杂度O(n)5.1 数据结构与算法效率5.1.2 数据结构对算法效率的影响算法复杂度效率学习任务通过阅读书本118页5.1.21、认识: 算法复杂度对效率的影响2、描述数据结构特点(如:数组、链表)3、回答下面问题求解三角形面积数组与链表的数据结构特点2数据结构 逻辑结构 存储结构 基本操作数组 确定 连续 增、删、改、查链表 明确的 不连续 增、删、改、查head查看第n个元素的时间复杂度 插入、删除元素时间复杂度数组 O(1) O(n)链表 O(n) O(1)移动具体如何度量某个算法的效率高低3具体算法具体分析数据量、数据结构(逻辑结构、存储结构、基本操作)、……学习体验import times = 0 #执行1次n = 10 ** 4#n=int(input("请输入n值体验时间复杂度:"))#程序二s = 0start = time.time()print("正在计算中,可以改变n的值体验时间长短")for i in range(1,n + 1): #执行n次for j in range(1,n + 1):s = s + 1 #执行n * n次print(s)end = time.time()print(end - start)#程序一start = time.time()for i in range(1,n + 1): #执行n次s = s + 1 #执行n次print(s)end = time.time()print(end - start)作业AB练5.1的A 展开更多...... 收起↑ 资源预览