这一章节特别有意思。习题也比较多,但是很容易掌握。主要描述的就是在已知数据结构的基础上,通过增加或修改部分基础操作。来构造更加有效的新数据结构。14.1动态数据统计本节主要介绍如何修改红黑树,使得可以在O(lgn)时间内确定顺序统计量,如何在O(lgn)时间内确定一个元素的秩,即它在集合线性序中的位...
分类:
编程语言 时间:
2015-03-03 18:13:51
阅读次数:
137
上一篇博客中对 Delete 函数的实现是根据被删除节点子节点的子节点个数, 分为无子节点, 一个子节点和两个子节点的情况分别考虑的。而这次的代码是根据算法导论的实现用 C++ 直译过来的, 代码如下:void BinarySearchTree::Delete (const int32_t& val...
分类:
编程语言 时间:
2015-03-03 15:09:34
阅读次数:
141
代码: 1 #include 2 #include 3 4 using namespace std; 5 6 int size = 10; 7 8 void Swap(int &a, int &b) 9 {10 int c = a;11 a = b;12 b = c;1...
分类:
编程语言 时间:
2015-03-03 09:45:31
阅读次数:
173
寻找第二小的元素:如果用堆排序的方法,我们建立一个堆后只需要,比较根节点的左儿子和右儿子的大小就可以得到第二小的节点了。而且BuildHeap的代价只有O(n)。 1 #include 2 3 using namespace std; 4 5 #define Left(i) i*2+1 6...
分类:
编程语言 时间:
2015-03-02 16:46:13
阅读次数:
132
什么是算法? 简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E. Leiserson 《算法导论第3版》) 可以这样理解,算法是用来解决特定问题的一系列步骤(不仅计算机需要算法,我们在日常生活中也在.....
分类:
编程语言 时间:
2015-03-02 13:02:22
阅读次数:
157
实现一个O(lgn)的最大堆优先队列的delete操作。Heap-Delete(A,i)操作能够将节点i从对中A删除。代码说明:假如删除序号为i的节点,那么我们先把最后的节点,放到i中去,然后对i进行堆维护,即向下维护堆,然后此时得到的序号为i的值向下能满足堆的性质,但向上不一定可以,所以我们再向上...
分类:
编程语言 时间:
2015-03-01 14:27:44
阅读次数:
180
插入排序的机理与打牌整理手中的牌的做法差不多。(1)开始摸牌时,我们的左手是空的,接着一次从牌面上摸起一张牌,并将它插入到左手一把牌中的正确位置上。(2)为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较。(3)无论什么时候左手中的牌都是有序的。插入排序升序代码如下: 1 void In...
分类:
编程语言 时间:
2015-03-01 11:46:28
阅读次数:
120
这人要一上年纪,为何感觉时间过的忒快呢?这不转眼之间,14年已经Say GoodBye。回头看看自己走过的路吧!
·备战软考
从暑假过后,就开始了软考的大战。有幸成为软考的小组长,从尚学堂的java基础——软考课本——算法导论——设计模式,整个流水线式的学习过了一遍。现在翻翻自己当初的笔记,还保留这软考时总结的20多张导图。也多亏了这些好的学习方法,才能学习的更高效,考试临阵不慌。这不软考...
分类:
其他好文 时间:
2015-02-28 20:20:05
阅读次数:
172
题目摘要:利用random(0,1);提供一个random(a,b)的函数分析:利用random(0,1)产生2进制数,这可以产生所有0,1,2……n的数,当这些数在[a,b]中时,我们就返回它,不在就不返回。实现时n只要包含b-a就可以了然后加上a后再判断。 1 #include 2 #inclu...
分类:
编程语言 时间:
2015-02-28 18:05:02
阅读次数:
184
只推荐经典好书, 所有书籍我都读过, 没读过的我不会推荐。网上很多人推荐各种书籍, 豆瓣评分也很高, 但实际读起来不是翻译的太烂,就是根本不是什么好书。很多人推荐算法导论,但我都拿起 2 次又放下 2 次了,根本看不下去, 不是我水平太菜,就是算法导论根本不适合算法入门。1 大话设计模式这是我的 O...
分类:
其他好文 时间:
2015-02-27 22:47:46
阅读次数:
222