目录 1、问题的引出-求第i个顺序统计量2、方法一:以期望线性时间做选择3、方法二(改进):最坏情况线性时间的选择4、完整测试代码(c++)5、参考资料内容 1、问题的引出-求第i...
分类:
编程语言 时间:
2014-10-24 00:02:48
阅读次数:
640
平台:Ubuntu 12.04/gcc 4.6.7插入排序 1 #include 2 #include 3 #include 4 using namespace std; 5 6 template 7 void insertSort(vector& vec){ 8 //vector::...
分类:
编程语言 时间:
2014-10-22 21:34:55
阅读次数:
212
堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆。堆分为下面两种类型:大顶堆:父结点的值不小于其子结点的值,堆顶元素最大小顶堆:父结点的值不大于其子结点的值,堆顶元素最小堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序...
分类:
编程语言 时间:
2014-10-20 21:14:02
阅读次数:
239
开放寻址法(open addressing)中,所有元素都存放在槽中,在链表法散列表中,每个槽中保存的是相应链表的指针,为了维护一个链表,链表的每个结点必须有一个额外的域来保存它的前戏和后继结点。开放寻址法不在槽外保存元素,不使用指针,也不必须为了维护一个数据结构使用额外的域,所有可以不用存储指针而节省的空间,使得可以用同样的空间来提供更多的槽,也潜在地减少了冲突,提高了检索速度。
为了使用开放...
分类:
其他好文 时间:
2014-10-20 13:30:34
阅读次数:
648
题目:对于一棵有N个结点的树,设计在O(N)时间内完成的先序、中序与后序遍历算法一、先序遍历递归实现:void InOrder( SearchTree T ){ if ( T != NULL ) { Visit( T ); InOrder( T->Left )...
分类:
编程语言 时间:
2014-10-18 18:12:26
阅读次数:
250
题目:设计一个执行中序遍历的非递归算法解答:分析:1、使用栈模拟递归调用的过程,即可以实现中序遍历2、在结点中增加指针域,使该指针域指向父节点,通过迭代即可实现中序遍历非递归算法:栈模拟算法版本一:// InOrder Traveraslvoid InOrder( SearchTree T ) { ...
分类:
编程语言 时间:
2014-10-18 17:00:00
阅读次数:
285
题目:使用单链表实现队列,Enqueue与Dequeue操作时间为O(1)代码:struct Node;struct QueueRecord;typedef struct Node * PtrToNode;typedef struct QueueRecord * Queue;struct Node{...
分类:
编程语言 时间:
2014-10-18 15:22:23
阅读次数:
241
题目:给出O(N)运行时间的非递归算法,实现对一个含N个元素的链表的逆转,要求空间复杂度为O(1)代码:/* Assuming List with header and L is not empty */List ReverseList( List L ){ Position CurrentP...
分类:
编程语言 时间:
2014-10-18 15:14:15
阅读次数:
195
题目:用两个队列实现一个栈,并分析栈操作运行时间分析:栈的操作只能在表头进行;而队列的入队在表头进行,出队只能在栈尾进行;考虑将栈底元素变为栈顶元素,即进行倒置,就能在表头进行Pop操作;解答:(不考虑溢出)1、使用两个队列A与Tmp,Tmp队列作为中转;2、当进行Push操作时,在队列A中进行入队...
分类:
编程语言 时间:
2014-10-18 14:02:04
阅读次数:
198
题目:用两个栈实现一个队列,并分析相关队列操作的运行时间解答:1、使用两个栈S1与S2;2、通过栈S1的Push执行队列入队操作,通过栈S2的Pop执行队列出队操作3、当栈S2为空后,即S1->Top = S2->Top,转换;栈S2的Push执行入队操作,栈S1的Pop执行出队操作操作时间复杂度:...
分类:
编程语言 时间:
2014-10-18 13:54:59
阅读次数:
265