《数据结构(C语言版)》学习笔记01 绪论

目录

一、数据结构的基本概念

1.1 术语

1.2 数据结构三要素

二、算法

2.1 什么是算法

2.2 算法的五个重要特性

2.3 算法的四个设计要求 

三、算法分析

3.1 时间复杂度

3.2 空间复杂度


一、数据结构的基本概念

1.1 术语

  1. 数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称……对计算机而言数据的含义极为广泛,如图像、声音等都可以通过编码而归之于数据的范畴
  2. 数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理……一个数据元素可由若干个数据项(data item)组成……数据项是数据的不可分割的最小单位
  3. 数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。 
  4. 数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。 
  5. 数据类型(data type)是和数据结构密切相关的一个概念……用以刻画(程序)操作对象的特性……数据类型是一个值的集合和定义在这个值集上的一组操作的总称……按“值”的不同特性,高级程序语言中的数据类型可分为两类:一类是非结构的原子类型。原子类型的值是不可分解的……另一类是结构类型。结构类型的值是由若干成分按某种结构组成的,因此是可以分解的
  6.  抽象数据类型(abstract data type,简称ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,且不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用……“抽象”的意义在于数据类型的数学抽象特性……按其值的不同特性,可细分为下列三种类型:原子类型,属原子类型的变量的值是不可分解的;固定聚合类型,属该类型的变量,其值由确定数目的成分按某种结构组成;可变聚合类型,和固定聚合类型相比较,构成可变聚合类型“值”的成分的数目不确定……后两种类型可统称为结构类型
  7. 多形数据类型(polymorphic data type)是指其值的成分不确定的数据类型……其元素可以是整数或字符或字符串,甚至更复杂地由多种成分构成(只要能进行关系运算计科)。然而,不论其元素具有何种特性,元素之间的关系相同,基本操作也相同。 

1.2 数据结构三要素

逻辑结构中,

  1. 集合结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系
  2. 线性结构中的数据元素存在一对一的关系;
  3. 树形结构中的数据元素存在一对多的关系;
  4. 图状结构中的数据元素存在多对多的关系。 

物理结构中,

  1. 顺序存储把逻辑上相邻的元素存储在物理位置也相邻的存储单元中。
  2. 链式存储不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
  3. 索引存储在存储元素信息的同时,还建立附加的索引表。
  4. 散列存储根据元素的关键字直接计算出元素的存储地址,又称哈希存储。

关于运算,

施加在数据上的运算包括运算的定义与实现运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

——《2023年数据结构考研复习指导》

一个含抽象数据类型的软件模块通常应包含定义、表示和实现3个部分……任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构

——《数据结构(C语言版)》

二、算法

2.1 什么是算法

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

2.2 算法的五个重要特性

  1. 有穷性。一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  2. 确定性。算法中的每条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,对于相同的输入只能得到相同的输出。
  3. 可行性。算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
  4. 输入。一个算法有零个或多个的输入,这些输入取自某个特定的对象的集合。
  5. 输出。一个算法有一个或多个的输出,这些输出时同输入有着某些特定关系的量。 

2.3 算法的四个设计要求 

 通常设计一个“好”的算法应考虑达到以下目标。

  1. 正确性。算法应能够正确地解决求解问题。
  2. 可读性。算法应便于人们阅读和理解。
  3. 健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
  4. 效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

正确:程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果。

三、算法分析

3.1 时间复杂度

度量一个程序的执行时间通常有两种方法。

  1. 事后统计的方法  需要运行程序;所得时间依赖计算机的软硬件环境等因素,容易掩盖算法本身的劣势
  2. 事前分析估算的方法  同一个算法用不同语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行,效率均不相同

时间复杂度计算方法:

  1. 找到一个基本操作(最深层循环)
  2. 分析该操作的执行次数x与问题规模的关系x=f(n)
  3. x的数量级O(x)=O(f(n))就是算法的时间复杂度T(n)

一般情况下,算法中基本操作重复执行的次数时问题规模n的某个函数f(n),算法的时间量度记作

T(n)=O(f(n))

它表示随问题规模n的增大,算法执行的时间增长率和f(n)的增长率相同,称作算法的渐进时间复杂度(asymptotic time complexit),简称时间复杂度

显然,被称作问题的基本操作的原操作应是……最深层循环内的语句中的原操作,它的执行次数和包含它的语句的频度相同。语句的频度(frequency count)指的是该语句重复执行的次数。

3.2 空间复杂度

……以空间复杂度(space complexity)作为算法所需存储空间的度量,记作

S(n)=O(f(n))

其中n为问题的规模(或大小)。

一个上机执行的程序除了需要存储空间来寄存本身所用指令、常数、变量和输入数据外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的额外空间,否则应同时考虑输入本身所需空间(和输入数据的表现形式有关)。若额外空间相对于输入数据量来说是常数,则称此算法为原地工作

空间复杂度计算方法:

对普通程序来说,

  1. 找到所占空间大小与问题规模相关的变量
  2. 分析所占空间x与问题规模n的关系x=f(n)
  3. x的数量级O(x)就是算法空间复杂度S(n)

对递归程序来说,

  1. 找到递归深度x与问题规模n的关系x=f(n)
  2. x的数量级O(x)就是算法空间复杂度S(n)

===总结===

参考书籍:

  1. 《2023年数据结构考研复习指导》王道论坛 组编
  2. 《数据结构(C语言版)》严蔚敏 吴伟民 主编 
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值