数据结构部分3

3章
a.接口与实现
1.下列关于我们定义的接口的描述中,错误的是?
如果一个列表的 visible list 部分长度为 n,则头、首、末、尾节点的秩分别为 -1, 0, n, n + 1
解析:末、尾节点的秩应当为 n - 1, n
2.下列关于我们定义的接口的描述中,错误的是?
如果一个列表的 visible list 部分长度为 n,则头、首、末、尾节点的秩分别为 -1, 0, n, n + 1

b.无序列表
1.若将insertAsPred()改为以下函数,其结果是:
在这里插入图片描述
不能插入节点,原列表的结构被破坏
解析:表节点插入算法中设置链接的顺序不能随意改变,本例中新节点的succ会指向自己
2.我们可以考虑通过如下方式加快循秩访问的速度:如果r>n2,则我们可以从尾部哨兵开始不断访问pred(),最终从后向前地找到秩为r的节点。
关于这种优化,说法是错误的?
通过这样的优化,我们可以使循秩访问时间复杂度优于O(n)。
解析:O(n)的一半仍然是O(n)

c.有序列表
1.有序列表唯一化算法的过程是:
只保留每个相等元素区间的第一个元素
2.能否在有序列表中用二分查找使得时间复杂度降为Θ(log2n)?
不能,因为列表不能高效地循秩访问
解析:每次需要Θ(n)的时间定位到中点mi

d.选择排序
1.V={11, 5, 7, 13, 2, 3},对V进行选择排序,被选为未排序子向量中最大的元素依次为:13, 11, 7, 5, 3
解析:即整个V中的次序
2.为了保证selectSort()算法的稳定性,我们采取的措施是:
Max()中对于多个相等的最大元素,选取其中位置最靠后者
3.对于规模为n的向量或列表,选择排序和冒泡排序的最坏时间复杂度为:
Θ(n2),Θ(n2)

e.插入排序
1.insertionSort()的平均、最坏时间复杂度分别为:Θ(n2),Θ(n2)
2.n个元素的序列所含逆序对的个数最大是:(n(n-1))/2
解析:显然n个元素的序列的逆序数≤(n2)。考虑{n,n−1…2,1},它可以达到这个上界。故最大的逆序数即为(n2)=n(n−1)2
3.对于插入过程排序中的已排序子序列(设其长度为k):
其中的元素是原序列中位于前方的k个元素
4.在插入排序的某一步后得到如下子序列V={2,7,13,5,3},此时已排序部分有3个元素。经过又一轮迭代后的结果是:
{2,5,7,13,3}
解析:将5插入到适当位置

本章测试:
1.下列关于向量和列表的说法错误的是:
向量归并排序的时间复杂度是O(nlog2(n)),而列表为Ω(n2)
2.为了在列表中插入一个新节点node作为p的直接前驱,有四个相关的语句
①p->pred->succ = node

②node->pred = p->pred

③node->succ = p

④ p->pred = node
上述语句执行顺序正确的是:
③②①④
解析:①和②的正确执行需要能够定位p原先的直接前驱p->pred,而④会破坏p到其的链接,故①和②必须在④之前执行。可以通过画图的方式理解该过程
3.对于n个节点的双向、单向列表,定位某节点p直接前驱的最坏时间复杂度分别为:O(1),O(n)
解析:.对于双向列表,直接访问p->pred即可定位其直接前驱,只需O(1)的时间。对于单向列表,定位其直接前驱需要从首节点开始逐一访问各节点,最坏情况下需要遍历整个列表,故花费O(n)的时间
4.在有序列表中查找一个元素的时间复杂度是:Ω(n)
解析:即使列表是有序的,查找的效率也不会高于顺序查找
5.对列表{11, 5, 7, 13, 2, 3}进行选择排序,每一次selectMax()被选为未排序子列表中最大者的元素依次为:
13, 11, 7, 5, 3
解析:即整个列表中的次序(除去最小的元素不必处理)
6.selectSort()算法的哪种实现是稳定的:
每一趟将最小元素移到前方,对于多个相等的最小元素,选取其中位置最靠前者。
解析:稳定即要保持原序列中相等元素排序后相对位置不变
7.对于插入排序过程中的已排序子序列(设其长度为k):
其中的元素是原序列中位于前方的k个元素
8.插入排序中的某一次插入后得到序列{2, 7, 13, 5, 3, 19, 17},此时已排序部分有3个元素。又经过2趟迭代后的结果是:{2, 3, 5, 7, 13, 19, 17}
解析:将5和3插入到适当位置
9.一个序列的逆序数τ定义为该序列中的逆序对总数,规模为n的列表中插入排序进行的元素比较总次数为:O(n+τ)
解析:每个逆序对归于其中位置靠后的元素可得出O(τ),考虑到每一趟插入有可能要进行一次额外的比较(最后一次),最终结果是O(n+τ)
10.长度为n的列表,被等分为n/k段,每段长度为k,不同段之间的元素不存在逆序。对该列表进行插入排序的最坏时间复杂度为:O(nk)
解析:对每段的排序实际上可以视为分别进行。在某些库中的排序算法(比如STL中的sort)会先用其它的排序算法达到以上分段的效果,再对整个序列调用插入排序,以期获得较高的实际效率。

发布了4 篇原创文章 · 获赞 7 · 访问量 675

猜你喜欢

转载自blog.csdn.net/qq_38101996/article/details/104554044