【数据结构基础笔记】第一章绪论之算法及算法分析

51 篇文章 2 订阅
47 篇文章 162 订阅

目录

一、简要

1、涵盖内容

2、学习要求

3、参考书目

二、重要笔记

1、算法

2、算法效率度量


一、简要

第一章一共四小节,只有第四节单独作为一个博客发表,不仅仅是这一节在我心中地位比较重要,这一节在考研,期末考试和以后的码农生涯都会有重要作用。我不能说我这一节总结的有多好,但我还是希望能拿出来与大家分享。

1、涵盖内容

1、算法的定义、算法的基本特性以及算法分析的基本概念。

2、算法的设计要求,效率度量方式以及存储空间需要。

2、学习要求

1、掌握算法的五个重要特性及特点;

2、掌握评价算法的标准,会计算时间复杂度和空间复杂度。

3、参考书目

《数据结构(C语言版)》严蔚敏、吴伟民 编著  清华大学出版社

二、重要笔记

1、算法

1.定义

算法(algorithm)是对特定问题求解步骤的一种描述,他是指令的有限序列,其中一条指令表示一个或多个操作。

2.五个重要特性

(1)有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可能在有穷时间内完成

(2)确定性:算法中每一条指令必须有确切的含义读者理解时不会产生二义性,在任何条件下,算法只有唯一的一条执行路径。对于相同的输入只能得到相同的输出

(3)可行性:一个算法是能行的,算法中描述的操作都是可以通过已实现的基本运算执行有限次来实现

(4)输入:一个算法有零个或多个输入。取自某个特定的对象的集合。

(5)输出:一个算法有一个或多个输出。同输入有某种特定关系的量。

3.算法目标

(1)正确性:算法应当满足具体问题的需求,并能正确的解决求解问题

(2)可读性:算法主要是为了人的阅读和交流,其次才是机器执行,可读性有助于人对算法的理解,晦涩难懂的算法难以调试和修改。

(3)健壮性:当输入非法数据时,算法也能适当做出反应或进行处理,而不是产生莫名其妙的输出结果。

(4)效率与低存储量需求:效率指的是算法执行的时间,存储量需求是指算法执行过程中所需要的最大的存储空间,这两者都与问题的规模有关

2、算法效率度量

1.度量方法

(1)事后统计的方法

         缺陷:依据算法编制的程序;依赖计算机硬件,软件等环境因素,容易掩盖算法本身的优劣。

(2)事前分析估算的方法

        取决于以下因素:算法策略;问题规模;书写程序的语言(实现语言级别越高,执行效率越低);编译所产生的机器代码质量;机器执行指令速度。

 

2.时间复杂度

一个语句的频度是指该语句在算法中被执行的次数,算法中所有的语句的频度之和记作T(n),它是该算法问题规模n的函数,记作

它表示随着问题规模n的增大,算法执行时间的增长率和  f(n)  的增长率相同。称之为算法的渐近时间复杂度,简称时间复杂度

(1)常用时间复杂度

注:越往下,算法的时间复杂度越高,编写算法时尽量避免使用指数阶。

(2)时间复杂度分类

最坏时间复杂度:最坏情况下的时间复杂度。

平均时间复杂度:所有输入实例等概率出现的期望运行时间。

最好时间复杂度:最好情况下的算法时间复杂度。

注:一般总是考虑最坏时间复杂度,保证算法的运行时间不会比它更长。

3.空间复杂度

算法的所消耗的存储空间,即算法的空间复杂度。记为:

算法原地工作:算法所需要的辅助空间是常量,即O(1)。


 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 绪论作业答案(共50分) 一、分析如下程序中 (1)~ (10)各语句的频度。(每个1分,共10分) Ex( ) { int i , j , t ; (1) for( i=1 ; i<10 ; i++) //n = (2) printf(“\n %d” , i ); //n = (3) for(i=1; i<=2; i++) //n = (4) printf(“\n”); //n = (5) for(i=1; i<=9; i++) //n = { (6) for(j=1; j <= i ; j++) //n = { (7) t = i * j ; //n = (8) printf(“]”,t); //n = } (9) for(j=1; j 0) { if(x > 100) {x -= 10 ; y -- ;} else x ++ ; } 问if 语句执行了多少次?(2分) y--执行了多少次?(2分) x ++执行了多少次?(2分) 三、回答问题(共25分) 书中16页的起泡排序如下: void bubble_sort(int a[],int n){ //将a中整数序列重新排列成自小至大有序的整数序列。 for(i=n-1,change=TRUE;i>=1&&change;--i){ change=FALSE; for(j=0;ja[j+1]{a[j]<-->a[j+1];change=TRUE; } } }//bubble_sort 1.(共15分)分析算法的最佳情况 ,最坏情况和平均情况下各自的时间复杂度(给出分析思路与过程)。 (1) 最佳情况的时间复杂度分析(5分): (2) 最坏情况的时间复杂度分析(5分): (3) 平均情况的时间复杂度分析(5分): 2.(共10分)比较与C语言书中的起泡排序异同,并从时空效率角度说明谁更优。 四、完成如下选择题(每3分,共9分)。 1. 设f为原操作,则如下算法时间复杂度是( )。 for (i = 1; i*i=1;i--) for(j=1;jA[j+1]) A[j]与A[j+1]对换; 其中n为正整数,则算法在最坏情况下的时间复杂度为( )。 A.O(n) B.O(nlog2n) C. O(n3) D. O(n2)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值