王道2021-第一章 绪论

1.1 数据结构的基本概念

数据结构的三要素:逻辑结构、存储结构、数据的运算

 

逻辑结构

线性结构:线性表、栈、队列;非线性结构:树、图、集合

与存储结构无关,独立于计算机

 

存储结构

物理结构,包括顺序存储(随机存取,碎片多)、链式存储(不会出现碎片,指针占用存储空间,只能实现顺序存取)、索引存储(建立附加的索引表,索引项的一般形式为【关键字,地址】,检索速度快,索引表额外占用空间,增删数据要修改索引表花费较多时间)和散列存储等。

用计算机语言实现的逻辑结构,依赖于计算机语言

 

运算:

包括定义与实现,定义针对逻辑结构,实现针对存储结构

 

错题:

选择题:

3.以下属于逻辑结构的是:

A.顺序表 B.哈希表 C.有序表 D.单链表

答案:C。顺序表、哈希表、单链表都是数据结构,既描述逻辑结构,又描述存储结构和数据运算。有序表是指关键字有序的线性表,仅描述逻辑关系,既可以是链式存储也可以顺序存储。

 

6.在存储数据时,通常不仅要存储个数据元素的值,而且要存储:

A.数据的操作方法 B.数据元素的类型 C.数据元素之间的关系 D.数据的存取方法

答案:C

数据库就是数据和关系

 

7.链式存储设计时,节点内的存储单元地址:

A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续

答案:A。链式存储设计时,各个不同节点的存储空间可以不连续,但节点内的存储单元地址必须连续。

 

应用题:

1.对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?

应该注意到,数据的运算也是数据结构的一个重要方面。

对于两种不同的数据结构,它们的逻辑结构和物理结构完全有可能相同。比如二叉树和二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,前者通常用于表示层次关系,而后者通常用于排序和查找。虽然它们的运算都有建立树、插入节点、删除节点和查找节点等功能,但对于二叉树和二叉排序树,这些运算的定义是不同的,以查找节点为例,二叉树的时间复杂度为O(n),而二叉排序树的时间复杂度为O(log2n)。

 

1.2 算法和算法评价

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

算法的五个特性:有穷性、确定性、可行性、输入、输出

好的算法目标:正确性、可读性、健壮性、效率与低存储量要求。

算法效率的度量:时间复杂度、空间复杂度。

时间复杂度T(n) = O(f(n))

f(n)为算法中基本运算(最深层循环内的语句)的频度

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

O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

空间复杂度S(n) = O(g(n))

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

 

错题:

选择题:

 1.一个算法应该是:

A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C

答案:B。程序不一定满足有穷性,如死循环、操作系统等,而算法必须有穷。算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现。C只是算法的必要条件,不能成为算法的定义。

 

2.下面说法中,错误的是:

A.算法原地工作的含义是指不需要任何额外的辅助空间

B.在相同规模n下,复杂度为O(n)的算法在时间上总是优于复杂度为O(2^n)的算法

C.所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界

D.同一个算法,实现语言的级别越高,执行效率越低

答案:A。

B,不要想当然去给n赋予一个特殊值。

 

归纳总结:

时间复杂度的分析方法:

1、循环主体中的变量参与循环条件的判断

此类题应该找出主体语句中与T(n)成正比的循环变量,将之带入条件中进行计算。

2、循环主题中的变量与循环条件无关

此类题可采用数学归纳法或直接累计次数。多层循环时从内分析到外,忽略单步语句、条件判断语句,只关注主体语句的执行次数。

递归程序一般使用公式进行递推,非递归程序可以直接累计次数。

 

思维拓展:

求解斐波那契数列

F(n)={1,n = 0,1;F(n-1) + F(n-2), n>1}

有两种常用的算法:递归算法和非递归算法。试分别分析两种算法的时间复杂度。

答案:

节点数为计算次数。F(n)的斐波那契递归计算法有n层,共2^(n-1)-1个节点,因此F(n)的时间复杂度为O(2^n)。

斐波那契数列——递归法时间复杂度计算_qiuxiaonao的博客-CSDN博客_斐波那契数列递归时间复杂度

斐波那契数列递归算法和非递归算法以及其时间复杂度分析_一米阳光-的博客-CSDN博客_斐波那契数列递归和非递归时间复杂度

posted @ 2021-06-13 11:52  BernardBlack  阅读(887)  评论(0编辑  收藏  举报