- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 数据结构和算法绪论
算法、语言、程序的关系 算法:描述了数据对象的元素之间的关系(包括数据逻辑关系、 存储关系描述)。 描述算法的工具:算法可用自然语言、框图、类语言或高级程序设计语言进行描述。 自然语言简单但易于产生二义,框图直观但不擅长表达数据的组织结构,类语言可襒掉语言中的细节,专注算法本身的描述,而高级程序语言则较为准确但又比较严谨但细节过多。 程序是算法在计算机中的实现(与所用计算机及语言有关)。 算法、语言、程序的关系 Niklaus E. Wirth给出的公式:算法+数据结构=程序,说明数据结构和算法是程序的两大要素,二者相辅相成,缺一不可。算法是程序的灵魂。 算法和程序都是用来表达解决问题的逻辑步骤,但算法独立于具体的计算机,与具体的程序设计语言无关,而程序正好相反;程序是算法,但算法不一定是程序。 设计实现算法过程的步骤 设计实现算法过程的一般步骤 找出与求解有关的数据元素之间的关系(建立结构关系)。 确定在某一数据对象上所施加的运算。 考虑数据元素的存储表示。 选择描述算法的语言。 设计实现求解的算法, 并用程序语言加以描述。 第一章 绪论 背景 数据结构的基础概念 数据结构的内容 算法设计 算法描述工具 算法性能评价 要点小结 算法性能评价 性能评价 对问题规模N和该算法在运行时所占的空间S与所耗费的时间T给出一个数量关系的评价。 问题规模N对不同的问题其含义不同 对矩阵是阶数 对多项式运算是多项式项数 对图是顶点个数 对集合运算是集合中的元素个数 有关数量关系的计算 数量关系评价体现在时间——算法编程后在机器中所耗费的时间。 数量关系评价体现在空间——算法编程后在机器中所占的存储量。 算法性能评价 算法执行时间 一个算法的执行时间大致上等于其所有语句执行时间的总和, 对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。 语句频度 语句频度是指该语句在一个算法中重复执行的次数。 算法性能评价 例:两个n×n阶矩阵相乘。 1 for (i=0;in;i++) 2 for (j=0;jn;j++) { 3 c[i][j]=0; 4 for (k=0;kn;k++) 5 c[i][j]=c[i][j]+a[i][k]*b[k][j]; } 语句频度 n n2 n2 n3 n3 算法的时间复杂度 原操作是指从算法中选取一种对所研究问题是基本运算的操作, 用随着问题规模增加的函数来表征, 以此作为时间量度。 而对于算法分析,关心的是算法中语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级(Order of Magnitude)。用“O”来表示数量级。 算法的时间复杂度, 即是算法的时间量度,记作: T(n)=O(f(n)) 常常算法的执行时间上的节省一定是以增加空间存储为代价的,反之亦然。通常,以算法的执行时间作为算法优劣的主要衡量指标。 算法的时间复杂度 T(n)=O(f(n)) 表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。 常量阶:O(1) 线性阶:O(n) 平方阶:O(n2) 立方阶:O(n3) 指数阶:O(2n) 对数阶:O(log2n) 二维阶:O(nlog2n) 常用的时间复杂度频率计数 常用的时间复杂度频率表 一般情况下, 随n的增大,T(n)的增长较慢的算法为最优的算法。应尽可能选择使用多项式阶O(nk)的算法, 而避免使用指数阶的算法。 常用的时间复杂度频率计数 Plot of efficiency 常用的时间复杂度频率计数 例如: 下列程序段: for (i=1; i n; i++) for (j=i; j= n; j++) x++; 有一个二重循环, 语句x++的执行频度为: n+(n-1)+(n-2)+…+3+2+1 =n(n+1)/2 而该语句执行次数关于n的增长率为n2, 即时间复杂度为O(n2)。 例 一 两 个 矩 阵 相 乘 void mult(int a[], int b[], int c[] ) { // 以二维数组存储矩阵元素,c 为 a 和 b 的乘积 for (i=1; i=n; ++i) for (j=1; j=n; ++j) { c[i,j] = 0; for (k=1; k=n; ++k) c[i,j] += a[i,k]*b[k,j]; } //for } //mult 基本操作: 乘法操作 时间复杂度: O
您可能关注的文档
最近下载
- 小学科学新教科版二年级上册第一单元 造房子教案(共6课)(2025秋).docx VIP
- 2025年广西公需科目第二套答案.docx VIP
- 设备供货配送方案.docx VIP
- 现代农业发展情况课件.ppt VIP
- 2025年广西专业技术人员继续教育公需科目(二)答案.docx VIP
- 《急诊与灾难医学》全套课件.pptx
- 精通版五年级英语上册Lesson3_教学课件.ppt VIP
- 农村公路畅通工程质量检测方案(第三方检测及交工验收).docx VIP
- 《现代农业发展》课件.ppt VIP
- 2025广西公需科目考试答案(3套涵盖95-试题)一区两地一园一通道建设人工智能时代的机遇与挑战.docx VIP
文档评论(0)