问题:给定n个整数的集合S和另一个整数X,描述一个运行时间为O(log N)的算法,该算法能够确定S中是否存在两个其和刚好为X的元素算法描述:1、先将集合中元素排序在数组A中2、对于集合中的每一个元素A[i],在排好序的数组A中二分查找 X-A[i]3、查找成功则存在,循环结束后查找未成功则不存在伪...
分类:
编程语言 时间:
2014-10-18 03:01:14
阅读次数:
164
1、二分查找(Binary Search) 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且表的存储结构为顺序结构。不妨设有序表是递增有序的。2、二分查找的基本思想二分查找算法思想:(1)首先确定该区间的中点位置: mid = ( l.....
分类:
编程语言 时间:
2014-10-18 01:53:51
阅读次数:
376
一、题目 二、思考 最小Young氏矩阵和最小堆的思想差不多,可以通过比较两者的同异来理解Young氏矩阵 不同点: min-Heap min-Young 堆顶(最小值) H[1] Y[i][j] 最后一个元素的位置 H[...
分类:
编程语言 时间:
2014-10-17 21:55:43
阅读次数:
311
题目:我们希望在一个【非常大】的数组上,通过利用直接寻址的方式来实现一个字典。开始时,该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储对象占用O(1)空间;SEARCH、INSERT和DELETE操作的时间均为...
分类:
编程语言 时间:
2014-10-16 15:53:02
阅读次数:
150
在数组中根据数组的下标查找一个元素只需要O(1)的时间,散列表是类似于数组的动态集合的数据结构,可以根据元素的关键字在一个表中快速地操作元素。
当散列表的关键字比较小,可以取自 {0, 1, ..., m-1} 一个有限的小范围内时,可以使用一个数组 T 表示这个动态集合,这个数组称为直接寻址表,动态集合中的元素位于 T[key]中。
当这个动态集合变得很大,使用数组保存这些数据将变得不可能。...
分类:
其他好文 时间:
2014-10-16 15:05:22
阅读次数:
126
原题:双向链表中,需要三个基本数据,一个携带具体数据,一个携带指向上一环节的prev指针,一个携带指向下一环节的next指针。请改写双向链表,仅用一个指针np实现双向链表的功能。定义np为next XOR prev,请根据表头提供的信息,为双向链表编写插入函数、删除函数和查找函数,并在O(1)时间内...
分类:
编程语言 时间:
2014-10-15 18:19:21
阅读次数:
151
#include
#include
#include
using namespace std;
/*
* 交换两个数
*/
void exchange(unsigned int *p,unsigned int *q)
{
unsigned int temp;
temp=*p;
*p=*q;
*q=temp;
}
/*
* 快速排序
*
*/
unsigned i...
分类:
编程语言 时间:
2014-10-15 18:01:26
阅读次数:
203
算法导论:10.4-4
对一个含n个结点的任意有根树,写出一个O(n)时间的过程,输出其所有关键字。
该树以左孩子或兄弟表示法存储。...
分类:
其他好文 时间:
2014-10-15 00:48:59
阅读次数:
335
算法导论:10.4-3
给定一个 n 结点的二叉树,写出一个 O(n) 时间的非递归过程,将该树每个结点的关键字输出。可以使用一个栈作为辅助数据结构。...
分类:
其他好文 时间:
2014-10-14 22:40:39
阅读次数:
157
分治策略中,我们递归地求解了一个问题,在每层递归都应用了三步1.分解,将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小2.解决,递归地求解出子问题,如果子问题的规模足够小,则停止递归,直接求解3.合并,把子问题的解给合并为原问题的解当子问题足够大的时候,需要递归,那就是递归情况当问题足...
分类:
编程语言 时间:
2014-10-14 19:40:09
阅读次数:
165