证明若用树实现并查集时,如果使用路径压缩,并允许大树并到小树上去。则存在一个由n次运算组成的序列,它需要的计算时间为O(nlog2n)。
若将森林中的每棵树视作一个等价类,则Kruskal算法迭代过程所涉及的计算不外乎两类:
支持以上操作接口的数据结构,即所谓的独立集(disjoint set),亦称作并查集(union-find set)。
a)试基于此前介绍过的基本数据结构实现并查集,并用以组织Kruskal算法中的森林;
b)按你的实现,find()和union()接口的复杂度各是多少?相应地,Kruskal算法的复杂度呢?
当元素类型为字符串时,为避免复杂的散列码转换,可以改用键树(trie)结构来实现词典ADT。
a)remove()接口复杂度中的因子r可否消除?
b)put()接口复杂度中的因子r可否消除?
c)试举例说明,以上实现方式在最坏情况下可能需要多达Ω(nr)的空间,其中n=|S|为字符串集的规模。
d)试改用列表来实现各节点,使所需空间的总量线性正比于S中所有字符串的长度总和——当然,get()接口的效率因此会降至O(hr),其中h为树高,同时也是Ss中字符串的最大长度。
e)键树中往往包含大量的单分支节点。试如图x9.5所示,通过折叠合并相邻的单分支节点,进一步提高键树的时、空效率。改进之后,键树的时、空复杂度各是多少?
f)习题[8-19](173页)曾介绍过四叉树(quadtree)结构,并指出其深度不受限制的缺陷。若将四个象限的二进制编码视作字符,即将字符表取作∑={00,01,10,11},则四叉树可以看作键树的特例,试基于这一理解,仿照以上技巧对四叉树进行压缩,使其深度不致超过O(n)。
设G与G'都是群,f是群G到G'的同态映射,a∈G.
(1)证明若a的阶是有限的,则f(a)的阶也是有限的,且|f(a)|、整除|a|.
(2)如果f(a)的阶是有限的,那么a的阶一定是有限的吗?证明你的结论.
在3.4节消费者的选择模型中,
(I)证明若条件(3)成立,则u(x1,x2)=e是单调减、下凸的曲线,
(2)验证(4),(6),(8)式给出的效用两数是否满足条件(3),
(3)若消费者的效用函数为(8)式,求最优比例p1q1/p2q2,并分析参数a,b的意义。
(4)若商品甲的价格P,增加,其余条件不变,讨论消费点Q的变化。
(5)若消费者购买商品的钱s增加,其余条件不变,讨论消费点Q的变化。
(6)推广到消费者购买m(>2)种商品的情况。
(1)沿袭5-60题使用逆转链遍历二叉树的思想。
(2)不使用tag标志,而是用内嵌的栈代替tag的作用。该内嵌的栈使用了叶结点作为栈的结构,没有另外定义栈的存储空间。
(3)利用栈解决在回溯时分辨究竟是从左子树还是右子树上升的问题,步骤是:
①当进入有非空左子树的结点的右子树时,将该结点的地址进栈。
②在回溯过程中如遇到结点的左、布子树都非空时,如果该结点就是存于栈顶的结点,则可判定当前是从该结点的右子树退回,该结点的右子女指针指向它的父结点;否则当前是从该结点的左子树退回,该结点的左子女指向它的父结点。
从类似如下的文本文件中读取出所有的姓名,并打印出
重复的姓名和重复的次数,并按重复次数排序:
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
程序代码如下(答题要博得用人单位的喜欢,包名用该公司,面试前就提前查好该公司
的网址,如果查不到,现场问也是可以的。还要加上实现思路的注释):