
算法
mengde007
偶要做高手!@已经忙了;
展开
-
编程珠玑之大记录问题
问题是这样的:一个文件包含一个1000万级别的记录;每个记录都要大于0并且小于10的7次方;只有一个数出现了2次,要求输出排序后的序列;限制内存1M,运行时间10s; 对于这样的设计,我们可以用位图来解决;只需要1000万个,并且内存正好是1M,符合要求;从文件里面遍历,取出一个数然后对应到位图中去,检查该标志位是否为0,如果为0,表示尚未有数据对应,那么置1;为1则表示原创 2009-12-13 15:10:00 · 422 阅读 · 0 评论 -
Heap Sort
<br />堆的定义: <br /> n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):<br /> (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤)<br /> 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。<br /> <br /> 堆的这个性质使得可以迅速定位在原创 2010-08-28 21:32:00 · 388 阅读 · 0 评论 -
KMP算法引论
解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串长度为m,那么这种方法的复杂度是O (mn)的。虽然很多时候复杂度达不到mn(验证时只看头一两个字母就发现不匹配了),但我们有许多“最坏情况”,比如,A= "aaaaaaaaaaaaaaaaaaaaaaaaaab",B="aaaaaaaab"。我们将介绍的是一种最坏情况下O(n)的算法(这里假设 m<=n),即传说中的KMP算法。<br /> 之所以叫做KMP,是因为这个算法是由Knu转载 2011-01-14 09:45:00 · 488 阅读 · 0 评论 -
随机数生成
<br /> int* GetRandomSequence2(int total) { int* sequence = new int[total]; int* output = new int[total]; for (int i = 0; i < total; i++) { sequence[i] = i;原创 2011-01-17 10:38:00 · 503 阅读 · 0 评论