我是靠谱客的博主 光亮裙子,最近开发中收集的这篇文章主要介绍数据结构与算法分析(C++语言版)_张琨版 第一章课后习题答案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一章 绪论

一、选择题

1. A B  2.B  3.B  4. D  5.A  6.A  7.C  8. B  9.D  10. A

二、填空题

1. 逻辑关系  2.树形结构 图状结构 3.链式存储结构  4. 没有 1 没有 1

5. 前驱 1 后继 多个  6. 多个 7.有穷性 确定性 可行性 8.确定性 9.顺序存储结构  10.空间复杂度

三、判断题

1. × 数据项是数据的最小单位

2.

3. × 数据的逻辑结构与存储结构无关

4. × 数据的逻辑结构主要指数据元素之间的相邻关系,与元素值无关

5. × 如线性表和二叉树属于两种不同的逻辑结构,但都可以采用顺序存储方法

6. × 数据的逻辑结构指数据元素之间的逻辑关系

7. × 算法优劣的判断标准是算法的时间复杂度和空间复杂度,他们与所用的计算机无关

8. × 程序不等同于算法,程序可以不停机,算法具有有穷性

9. × 算法不必由计算机实现

10.

四、简答题

1.在数据结构中,逻辑结构与计算机无关,存储结构是数据元素之间的逻辑关系在计算机中的表示。存储结构不仅将逻辑结构中所有数据元素存储到计算机内存中,而且还要在内存中存储各数据元素间的逻辑关系。通常情况下,一种逻辑结构可以由多种存储结构。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合,一般包括3个方面的内容:数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和定义在这个值集上的一组运算的总称。

2. 在数据结构中这类例子较多,如顺序表和字符串、栈和队列等,下面以二叉树和二叉排序树进行说明。

首先,二叉树和二叉排序树是两个不同的数据结构。二叉树的定义为:二叉树是有限的节点集合,这个集合或者是空,或者是由一个根节点和两棵互不相交的称为左子树和右子树的二叉树组成。二叉排序树的定义为:二叉排序树或者是空树,或者是满足以下性质的二叉树:

若它的左子树非空,则左子树上所有记录的值均小于根记录的值。

若它的右子树非空,则右子树上所有记录的值均大于根记录的值。

左右子树本身又各是一棵二叉排序树。

两者在逻辑结构和存储方式上完全相同,因为二叉排序树完全采用二叉树的逻辑表示和存储方式。两者的运算由建立树、插入节点和查找节点等。

对于二叉树和二叉排序树,这些运算的定义是不同的,如查找节点时,在二叉树中查找某节点需要对其中节点进行遍历,其时间复杂度为O(n),而在二叉排序树中查找节点时一层层向下查找,其时间复杂度为O(h)(h为二叉排序树的高度)。如插入节点时,二叉树中可以在任何地方插入一个节点,而二叉排序树插入一个节点后,必须使其满足二叉排序树的特性。

3. 通常从两方面考虑:第一是算法所需的存储空间量,第二是算法所需的时间。对于算法所需的时间又涉及以下几点:

程序运行时所需输入的数据总量、计算机执行每条指令所需的时间、程序中指令重复执行的次数

4. 常见的时间复杂度按数量级递增排列,依次为:常数阶0(1)、对数阶0(log2n)、线性阶0(n)、线性对数阶0(nlog2n)、平方阶0(n^2)、立方阶0(n^3)k次方阶0(n^k)、指数阶0(2^n)

1)先将题中的函数分成如下几类:

常数阶:2^100

对数阶:log2n

K次方阶 n^0.5  n^(3/2)

指数阶 (按指数由小到大排)n^logn(3/2)^n2^n n!n^n

2)(2/3^n 由于底数小于1, 所以是一个递减函数,其数量级应小于常数阶

所以根据以上分析按增长率由小到大的顺序排列可以得到:

2/3^n < 2^100 < log2n < n^0.5 < n^(3/2) < n^(log2n) < (3/2)^n <2^n < n! < n^n

5.  数据结构的主要内容是讨论数据组织和数据处理。一个求解问题可以用ADT(抽象数据类型)来描述,它包含数据的逻辑结构和抽象运算。一个逻辑结构可以对应多个存储结构,每种存储结构之上可以设计多种实现抽象运算的算法,通过时间复杂度和空间复杂度分析得到最佳算法。

五、计算题

1. O(n)  2.O(log3n)  3. O(log4n)  4. O(n^2 *log5n) 5.O(n^2)  6. O(n^3)

7. O(n)  8. (n/2)^2  O(n^2)  9. O(n)

10. (1)首先我们针对有n个碟子的柱子a,将n-1个碟子移动到柱子b。假定这个问题为S(n)表示移动的步数,则上面的问题是S(n)的一个子问题S(n-1)。然后将最下面的碟子移动到柱子c,最后再将n-1个碟子移动到c。后面这一步也相当于S(n)的子问题S(n-1)。.它和前面第一步移动n-1个碟子唯一不同的地方在于第一步是借助c将n-1个碟子从a移动到b,而最后这一步是借助a将n-1个碟子从b移动到c。除了借助的柱子和目的柱子不一样,其他的都是一样的。这样我们就可以很容易得到一个这样的推导关系: 

S(n) = 2S(n - 1) +1

  (2) 再考虑一种初始的情况,假定只有一个碟子需要移动,我们直接将碟子从a移动到c,那么需要的步骤是1步。因此可以说S(1) = 1。

综上可以得到,S(n)=2^n -1 所以该算法的时间复杂度为O(2^n)


【注意】本答案为呼呼学长 QQ1607151753 整理,仅用于内部交流,未经允许,严禁私自传播。

最后

以上就是光亮裙子为你收集整理的数据结构与算法分析(C++语言版)_张琨版 第一章课后习题答案的全部内容,希望文章能够帮你解决数据结构与算法分析(C++语言版)_张琨版 第一章课后习题答案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部