随笔分类 -  数据结构与算法分析

主要是Weiss的书里的习题
摘要:普通的二叉搜索树可能会由于数据不平均、删除产生高度差等原因,使树倾向于不平衡生长,导致操作慢于O(NlogN)。为应对此现象,将搜索、删除、插入的最坏时间也控制在O(NlogN)上,产生了平衡二叉树的概念。一颗平衡二叉树的递归定义是:它的左右子树高度相差不超过1,且左右子树也都是平衡二叉树。AVL树... 阅读全文
posted @ 2015-03-22 21:15 猫薄荷喂狗 阅读(219) 评论(0) 推荐(0)
摘要:【二叉搜索树】随机生成时平均深度为logN,平均插入、删除和搜索时间都是O(logN)。可能存在的问题是数据不均衡,使树单边生长,极端情况下变成类似链表,最坏插入、删除、搜索时间O(N)写这个例程也花了些时间,例程主要包括查找、插入、删除、遍历、清空几个内容。同时避免之前写链表到了半途再修改,拷贝构... 阅读全文
posted @ 2015-03-21 05:02 猫薄荷喂狗 阅读(324) 评论(0) 推荐(0)
摘要:基本上每章到增补附注这里就算是结束了。根据设想,每章的这一篇基本上会注明这一章哪些题没有做,原因是什么,如果以后打算做了也会在这里补充。还有就是最后会把有此前诸多习题的代码和原数据结构放整理后,以单个数据结构为单位放在一个文档里面。【未做习题】习题3.1:编写打印出一个单链表的所有元素的程序。//这... 阅读全文
posted @ 2015-03-21 05:00 猫薄荷喂狗 阅读(195) 评论(0) 推荐(0)
摘要:【练习3.26】双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作:Push(X,D):将项X插入到双端队列D的前端。Pop(D):从双端队列D中删除前端项并返回。Inject(X,D):将项X插入到双端队列D的尾端。Eject(D):从双端队列D中删除尾端项并返回。编... 阅读全文
posted @ 2015-03-21 04:27 猫薄荷喂狗 阅读(932) 评论(0) 推荐(0)
摘要:【练习3.25】编写实现队列的例程,使用a.链表b.数组Answer:在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以。数组模拟队列和链表的两点小不同是:①、数组空间有限,入队需要检测数组是否已经满②、数组经过几次操作后,rear可能绕回front前面,所以许多操作都要用模来实... 阅读全文
posted @ 2015-03-21 02:53 猫薄荷喂狗 阅读(568) 评论(0) 推荐(0)
摘要:【练习3.22】a.提出支持栈的Push和Pop操作以及第三种操作FindMin的数据结构,其中FindMin返回该数据结构的最小元素,所有操作在最坏情况下的运行时间都是O(1)。b.证明,如果我们加入第四种操作DeleteMin,那么至少有一种操作必须花费Ω(logN)时间。【练习3.23】说明如... 阅读全文
posted @ 2015-03-21 00:27 猫薄荷喂狗 阅读(358) 评论(0) 推荐(0)
摘要:【练习3.21】编写仅用一个数组而实现两个栈的例程。除非数组的每一个单元都被使用,否则栈例程不能有溢出声明。Answer:很简单,一个栈从数组头起,一个栈从数组尾起,分别保留左右栈头索引。如left=5则表示array[0]~array[4]为左栈元素,right=7则表示array[8]~arra... 阅读全文
posted @ 2015-03-20 23:32 猫薄荷喂狗 阅读(1163) 评论(0) 推荐(0)
摘要:【练习3.20】a.编写一个程序将中缀表达式转换为后缀表达式,该中缀表达式含括号及四则运算。b.把幂操作符添加到你的指令系统中去。c.编写一个程序将后缀表达式转化为中缀表达式。Answer:花了好大力气把a,b就放一起写好了,终于知道为啥说编译原理难了,就这么简单的句法分析也好坑爹。c真的不打算写了... 阅读全文
posted @ 2015-03-20 10:17 猫薄荷喂狗 阅读(494) 评论(0) 推荐(1)
摘要:【练习3.19】编写一个程序计算后缀表达式的值。Answer:计算的方法书上说得很明白了,看代码行,没写错误检测【因为懒】。测试代码: 1 #include 2 #include "stack.h" 3 using namespace std; 4 using namespace stack; 5... 阅读全文
posted @ 2015-03-20 04:02 猫薄荷喂狗 阅读(482) 评论(0) 推荐(0)
摘要:【练习3.18】用下列语言编写检测平衡符号的程序a.Pascal ( begin/end, ( ), [ ], { } )。b.C语言( /* */, ( ), [ ], { })。c.解释如何打印出错信息Answer:a和b本质是一样的,就写了b小题即C语言的检测。基本思想就是用栈,除了注释符号有... 阅读全文
posted @ 2015-03-20 01:50 猫薄荷喂狗 阅读(958) 评论(0) 推荐(0)
摘要:【练习3.17】不同于我们已经给出的删除方法,另一种是使用懒惰删除的方法。为了删除一个元素,我们只标记上该元素被删除的信息(使用一个附加的位域)。表中被删除和非被删除的元素个数作为数据结构的一部分被保留。如果被删除元素和非被删除元素一样多,我们就遍历整个表,对所有被标记的节点执行标准的删除算法。a.... 阅读全文
posted @ 2015-03-20 01:47 猫薄荷喂狗 阅读(1379) 评论(0) 推荐(0)
摘要:【练习3.16】假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素。LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小。考虑图3-61中的伪代码程序段。过程Delete删除位置j上的元素并使表破坏。a.解释该过程是如何工作的b.利用一般的表操... 阅读全文
posted @ 2015-03-19 20:35 猫薄荷喂狗 阅读(328) 评论(0) 推荐(0)
摘要:【练习3.15】a.写出自调整表的数组实现。自调整表如同一个规则的表,但是所有的插入都在表头进行。当一个元素被Find访问时,它就被移到表头而并不改变其余的项的相对顺序。b.写出自调整表的链表实现c.设每个元素都有其被访问的固定概率pi。证明那些具有最高访问概率的元素都靠近表头。Answer:a简单... 阅读全文
posted @ 2015-03-19 19:46 猫薄荷喂狗 阅读(692) 评论(0) 推荐(0)
摘要:【练习3.13】利用社会安全号码对学生记录构成的数组排序。编写一个程序进行这件工作,使用具有1000个桶的基数排序并且分三趟进行。Answer:首先,对社会安全号码不了解的就把它当成一个不超过9位的正整数就好了。于是题目就是,通过1000个桶,对9位正整数进行桶排序。因为一次最多比较三位(1000桶... 阅读全文
posted @ 2015-03-19 12:41 猫薄荷喂狗 阅读(340) 评论(1) 推荐(1)
摘要:【练习3.12】a.编写一个非递归过程以O(N)时间反转单链表。b.使用常数附加空间编写一个过程以O(N)时间反转单链表。Answer:这题的b貌似没啥意义,在a小题里直接用头插法,不断地将头节点后移,并将当前头节点所在的节点的后继指针指回前驱就能倒置链表了,不需要额外的空间。所以就写了a。测试代码... 阅读全文
posted @ 2015-03-18 14:49 猫薄荷喂狗 阅读(386) 评论(0) 推荐(0)
摘要:【练习3.11】编写查找一个单链表特定元素的程序。分别用递归和非递归实现,并比较它们的运行时间。链表必须达到多大才能使得使用递归的程序崩溃?Answer:实现都是比较容易的,但是实际上查找链表元素本身也没必要使用递归的方法。考虑到题目让人比较运行时间与程序崩溃的边界,可以认为这是警示大家不要滥用递归... 阅读全文
posted @ 2015-03-17 20:48 猫薄荷喂狗 阅读(686) 评论(0) 推荐(0)
摘要:【练习3.9】编写任意精度的整数运算包,要求使用类似多项式运算的方法。计算24000内数字0到9的分布。 阅读全文
posted @ 2015-03-17 20:29 猫薄荷喂狗 阅读(311) 评论(0) 推荐(0)
摘要:【练习3.8】编写一个程序,输入一个多项式F(X),计算出(F(X))P。你程序的时间复杂度是多少?Answer:(特例:P==0时,返回1。)如果P是偶数,那么就递归计算((F(X))P/2)*((F(X))P/2),如果P是基数,那么就递归计算((F(X))P/2)*((F(X))P/2)*F(... 阅读全文
posted @ 2015-03-17 19:19 猫薄荷喂狗 阅读(466) 评论(0) 推荐(0)
摘要:主要是,感觉原来的链表例程通过Node的分配形成了链表,但是没有自动消除Node的办法比较危险,一旦在clear()之前把链表赋了其它值就内存泄漏了。所以改了析构函数,自动清理分配出来的内存。既然改了析构同时就要改拷贝合成与拷贝赋值。然后还给链表加了个尾指针,否则每次插入都要O(N)的时间真的很蛋疼... 阅读全文
posted @ 2015-03-17 19:13 猫薄荷喂狗 阅读(205) 评论(0) 推荐(0)
摘要:【练习3.7】编写一个函数将两个多项式相乘,用一个链表实现。你必须保证输出的多项式按幂次排列,并且任意幂次最多只有一项。a.给出以O(M2N2)时间求解该问题的算法。b.写一个以O(M2N)时间执行乘法的程序,其中M≤N。c.写一个以O(MNlog(MN))时间执行乘法的程序。d.上面哪个时间界最好... 阅读全文
posted @ 2015-03-12 00:01 猫薄荷喂狗 阅读(1074) 评论(0) 推荐(0)