软件设计师错题整理——数据结构和算法

软件设计师考试历年真题的错题整理——数据结构和算法

章节习题——第三章:数据结构与算法

  1. 题目
    答案:A
    解析:解析
    算法A带入公式可得a=7,b=2,f(n)= n 2 n^{2} n2,算法B带入可得a=a,b=4,f(n)= n 2 n^{2} n2,A与B求出的复杂度如下图,要求B快于A,那么B的时间复杂度需要小于A的时间复杂度,则a需要小于49,那么最大则为48:
    在这里插入图片描述

  2. 已知一棵度为3的树(一个结点的度是指其子树的数目,树的度是指该树中所有结点的度的最大值)中有5个度为1的结点,4个度为2的结点,2个度为3的结点,那么,该树中的叶子结点数目为()
    A.10 B.9 C.8 D.7

    答案:B
    解析:
    树的特性:①:树中的结点总数等于树中所有结点的度数之和加1
    ②:度为m的树中第i层上至多有 m i − 1 m^{i-1} mi1个结点(i≥1)
    ③:高度为h、度为m的树中至多 m h − 1 m^{h-1} mh1/m-1有个结点
    ④:具有n个结点、度为m的树的最小高度为logm(n(m-1)+1)的上取整
    解题时有两种解题方法,一种时按照题意直接画出树,得到叶子节点数;第二种方法,按照特性①,得到 总结点数=51+42+2*3+1=20,那么 叶子节点数(度为0的节点数) = 总结点数-(度为1~3的节点数)=20-(5+4+2)=9

  3. 各类排序算法的时间复杂的(最好、最坏、平均),空间复杂度,是否稳定(相同的数字排序后保持原位置不变)
    更正:快速排序的空间复杂度为O(log2n)
    排序

  4. 以下的算法设计方法中,( )以获取问题最优解为目标。
    A.回溯方法 B.分治法 C.动态规划 D.递推

答案:C
解析:回溯法的实质是在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树。若进入某子节点的子树后没有找到解(或者需要找出全部解),则需要从子节点回退(回溯)至父节点,从而可以选择其他子节点进行搜索。回溯法有“通用的解题法”之称,用它可以系统地搜索一个问题的所有解或任一解。
分治与递归就像一对孪生兄弟,经常同时应用于算法设计之中。分治的思路是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的。若用分治法来解这类问题,则相同的子问题会被求解多次,以至于最后解决原问题需要耗费指数级时间。动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解,每个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。

  1. 若对一个链表最常用的操作是在末尾插入结点和删除尾结点,则采用仅设尾
    指针的单向循环链表(不含头结点)时,( )。
    A.插入和删除操作的时间复杂度都为 O(1)
    B.插入和删除操作的时间复杂度都为 O(n)
    C.插入操作的时间复杂度为 O(1),删除操作的时间复杂度为 O(n)
    D.插入操作的时间复杂度为 O(n),删除操作的时间复杂度为 O(1)

答案:C
解析:插入时,直接将原尾结点指向插入元素,插入元素的指针为新的尾指针,所以为O(1);删除节点时,必须要从尾结点开始遍历,找到尾结点的前置指针将其设为新的尾结点,因此复杂度为O(n)

  1. 在 KMP 模式匹配算法中,需要求解模式串 p 的 next 函数值,其定义如下(其中, j是字符在模式串中的序号)。对于模式串“abaabaca”,其 next 函数值序列为( )。
    kmp
    A. 01111111 B. 01122341 C. 01234567 D. 01122334
    答案:B
    解析:串的前缀——包含串的第一个字符,不包含最后一个字符的子串。串的后缀——包含串的最后一个字符,不包含第一个字符的子串。第i个字符的next值——从1 ~ i-1 串中最长相等的前后缀长度+1。第0个和第1个字符的next值固定为0 和 1。如在题中给出的串的第7个字符c的next值:第1~6个字符串为abaaba,长度为3的前缀aba与后缀aba相等,长度为4的前缀abaa,后缀aaba不相等,最长相等子串为长度为3的aba,所以next值为最长相等子串长度3+1=4。

  2. 对有 n 个结点、 e 条边且采用数组表示法(即邻接矩阵存储)的无向图进行深度优先遍历,时间复杂度为( )。
    A. O(n2) B. O(e2) C. O(n+e) D. O(n*e)

    答案:A
    解析:当用二维数组表示邻接矩阵图的存储结构时,查找每个顶点的邻接点所需时间为 O(n2),其中 n 为图中顶点数。而当以邻接表作图的存储结构时,e 为无向图中边的数或有向图中弧的数,深度优先搜索遍历图的时间复杂度为 O(n+e)。

  3. 霍夫曼编码将频繁出现的字符釆用短编码,出现频率较低的字符采用长编码。具体的操作过程为: i)以每个字符的出现频率作为关键字构建最小优先级队列;ii)取出关键〜字最小的两个结点生成子树,根节点的关键字为孩子节点关键字之和,并将根节点插入到最小优先级队列中,直至得到一颗最优编码树。霍夫曼编码方案是基于(1 )策略的。用该方案对包含 a 到 f 六个字符的文件进行编码,文件包含 100个字符,每个字符的出现频率(用百分比表示)如下表所示,则与固定长度编码相比,该编码方案节省了( 2)存储空间。
    第八题

    1.A.分治 B.贪心 C.动态规划 D.回溯
    2.A. 21% B. 27% C. 18% D. 36%

    答案:B,A
    解析:霍夫曼编码方案是基于贪心策略。首先根据出现频率画出最优树,并按照左子树为0右子树为1的编码标出霍夫曼编码:
    最优树
    在2位等长编码上,编写6个字符至少需要3位(000代表a,001代表b,010代表c,011代表d……),那么等长编码需要3*100=300存储空间;而霍夫曼编码需要:18 * 2+32 * 2+4 * 4+8 * 4+12 * 3+26 * 2=236,那么节约的空间为(300-236)/300=21.4%。此题中未考的字符对应霍夫曼编码,a:00,b:11,c:0110

  4. 对有 n 个结点、 e 条边且采用数组表示法(即邻接矩阵存储)的无向图进行深
    度优先遍历,时间复杂度为( )。
    A. O( n 2 n^{2} n2) B. O( e 2 e^{2} e2) C. O(n+e) D. O(n*e)

    答案:A
    解析:在邻接表中,就是要依次访问每个顶点,然后在每个顶点中依次访问每条边,把这些边的
    终点的入度+1 。也就是每个顶点和每条边依次要各访问一遍,所以时间复杂度是 O(n+e)。
    在邻接矩阵中,算法需要遍历邻接矩阵的每一个点,而邻接矩阵有 nn 个点,所以时间复
    杂度是 O(n
    n)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值