李春葆《数据结构教程》(第4版)课后习题-绪论(圣才出品)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二部分课后习题
第1章绪论
1.简述数据与数据元素的关系与区别。
答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据与元素之间的关系是元素与集合之间的关系。
2.数据结构和数据类型有什么区别?
答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。
3.设3个表示算法频度的函数f、g和h分别为:
f(n)=100n3+n2+1000
g(n)=25n3+5000n2
h(n)=n1.5+5000nlog2n
求它们对应的时间复杂度。
答:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),
当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n= O(n1.5)。
4.用C/C++语言描述下列算法,并给出算法的时间复杂度。(1)求一个n阶方阵的所有元素之和。
(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。(3)对于输入的任意n个整数,输出其中的最大和最小元素。答:(1)算法如下:
本算法的时间复杂度为O(n2)。
(2)算法如下:
本算法的时间复杂度为O(1)。
(3)算法如下:
本算法的时间复杂度为O(n)。
5.设n为正整数,给出下列各种算法关于n的时间复杂度。(1)
(2)
(3)
答:(1)设while循环语句执行次数为T(n),则:
(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:
(3)设while循环语句执行次数为T(n),则:
则
6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:
求mergesort(a,0,n-1)的时间复杂度。其中,merge(a,i,j,m)用于两个有序子序列a[i..m]和a[m+l..j]的合并,是一个非递归函数,它的时间复杂度为O(合并的元素个数)。
答:设mergesort(a,0,n-1)的执行次数为T(n),分析得到以下递归关系:
O(n)为merge()所需的时间,设为cn(c为常量)。因此:
由于趋近于1,则k=log2n。所以
上机实验题1
实验题1设计一个程序expl-1.cpp,输出所有小于等于n(n为一个大于2的正整数)的素数。要求:(1)每行输出10个素数;(2)尽可能采用较优的算法。’
实验题2编写一个程序expl-2.cpp,计算任一输入的正整数的各位数字之和,并分析算法的时间复杂度。
实验题3编写一个程序expl-3.cpp,判断一个字符串是否为“回文”(顺读和倒读都一样的字符串称为“回文”),并分析算法的时间复杂度。