(数据结构C++版)(第二版)重要知识点 第一章

第一章

1.计算机能够求解的问题一般可以分为数值问题非数值问题
数值问题通常抽象为数学方程
非数值问题通常抽象为 线性表,树,图等;
2.非数值问题的数据组织和处理:
(1)数据的逻辑结构:线性表,树,图等数据结构,其核心是如何组织待处理的数据,以及数据之间的关系。
(2)数据的存储结构:如何将上述的数据结构存储到计算机的存储中,其核心是如何有效地存储数据以及数据之间逻辑关系。
(3)算法:如何基于数据的某种存储结构实现插入,删除,查找等基本操作,其核心是如何有效地处理数据。
(4)常用的数据处理技术:查找技术,排序技术,索引技术
3.根据数据元素之间逻辑关系的不同,数据结构分为以下四类。
(1)集合:数据元素之间就是属于同一个集合,除此之外,没有任何关系。
(2)线性结构:数据元素之间存在着一对一的线性关系。
(3)树结构:数据元素之间存在着一对多的层次关系
(4)图结构:数据元素之间存在着多对多的任意关系
4.数据的存储结构又称为物理结构,是数据及其逻辑结构在计算机中的表示。
通常有两种存储结构:顺序结构和链接存储结构
顺序结构的基本思想是:用一组连续的存储单元依次储存数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。
链接存储结构的基本思想是:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针表示。
5.数据的逻辑结构是从具体问题抽象出来的数据模型,是面向问题的,反映了数据元素之间的关联方式或邻接关系。
数据的存储结构是面向计算机的,其基本目标是将数据及其逻辑关系存储到计算机的内存中。为了区别于数据的逻辑存储结构,一般将数据的逻辑结构称为数据结构。
6.一种数据的逻辑结构可以用多种存储结构来存储,而采用不同的存储结构,其数据处理的效率往往是不同的。
7.抽象数据类型ADT abstract data type
数据类型和抽象数据类型的区别仅仅在于:数据类型指的是高级程序设计语言支持的基本数据类型。而ADT是指自己定义的数据类型。
8.算法必须满足五个特性:输入,输出,有穷性,确定性,可行性。
一个好的算法除了满足五大特性以外还必须满足:
正确性:算法能满足具体问题的需求,即对于任何合法的输入,算法都会得出正确的结果。
鲁棒性:鲁棒性也称为健壮性。算法对非法输入的抵抗能力,即对于错误的输入,算法应能识别并作出处理,而不是产生错误动作或陷入瘫痪。
简单性:算法容易理解和实现。简单就如同美丽一样,很大程度上取决于审视者的眼光。
抽象分级:算法中的每一个逻辑步骤可以是一条简单的指令,也可以是一个模块,通过模块调用完成相应的功能。每个模块表示一种抽象,模块的内部描述了怎么样实现抽象,而模块的名称表示了模块的功能。
高效性:算法的效率包括时间效率和空间效率;时间效率显示了算法运行得有多快,而空间效率则显示了算法需要多少额外的存储空间。
9.算法的描述方法:
常见描述算法的方法有:自然语言,流程图,程序设计语言和伪代码等
10.算法分析,主要是分析它的运行效率。
度量算法效率的方法:
事后统计,先将算法实现,然后测。缺点特别多。不精准。
渐进复杂度,这是一种事前分析估算的方法。
11.算法的时间复杂度
撇开与计算机软硬件有关的因素,影响算法时间代价的最主要因素是问题规模。
问题规模是指输入量的多少。所以说算法所需要的时间T是问题规模n的函数T(n).
为了客观地反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量。
基本语句是执行次数与整个算法执行次数成正比的语句,对算法运行时间贡献最大,是算法中最重要得操作。这种衡量算法的方法得出的不是时间量,而是一种增长趋势的度量。换言之,只考察当问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶,称为算法的渐进时间复杂度,简称时间复杂度。通常用O表示。
定义
若存在两个正的常数c和n0,对于任意n>=n0,都有T(n)<=cf(n),则称T(n)=O(f(n))(或者称算法在O*(f(n))中)。
该定义说明了两个函数具有相同的增长趋势,并且T(n)的增长趋势至多趋同于函数f(n)的增长,大O记号用来描述增长率的上限。(也就是说,当输入规模为n时,算法耗费时间的最大值。)
12.算法的空间复杂度。算法的空间复杂度,是指在算法执行的过程中,需要的辅助空间数量。辅助空间是算法本身和输入输出所占据的空间外,算法临时开辟的存储空间。
通常记作: S(n) = Of(n);
13常量阶:时间复杂度为O(1)。
只要T(n)不是问题规模n的函数,而是一个常数,其时间复杂度均为O(1)。例如++x;
14.线性阶;时间复杂度为O(n);
例如:

for(int i = 1;i<=n;i++){
++x;
}

15.平方阶;时间复杂度为:O(n的平方);
例如:

for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++ ){
++x;
}
}

16.立方阶:时间复杂度O(n的三次方)
例如:

    for(int i = 1;i<=n;i++){
    for(int j = 1;j<=n;j++ ){
   c[i][j] = 0;
   for(int k = 1;k<=n;k++){
c[i][j]+=a[i][k]*b[k][j];
}
    }
    }

17.对数阶:时间复杂度为O(log2n).
例如:

for(int i = 1;i<=n;i = 2*i)
++x;

18.常见时间复杂度如下
O(log2n)<O(n)<O(n*log2n)<O(n的平方)<O(n的立方)<…<O(2的n次方)<O(n!)`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值