算法相关
帖子不能编辑
欢迎讨论算法和存储方面的问题
展开
-
键树的c++代码实现
建树时使用的是Ukkonens算法.因为看的都是英文资料,所以很吃力。加上这个算法很复杂,偶看了好几天。主要是在后缀链上老是出问题。对于后缀链,我觉得有几点比较重要,可以帮助你理解建树的过程。总结如下:(1)suffix link只能在内部节点之间出现.也就说只能从内部节点指向内部节点.所以如果节点是叶子的话,就不用考虑了。(2)一个新的内部节点总是由规则2产生的。规则2要拆分节点。(3)一个原创 2007-11-07 18:30:00 · 1095 阅读 · 0 评论 -
货船装箱问题的递归和非递归实现
#include #include //箱子数目#define BOXNUM 5//货船容量#define MAXLOAD 21//箱子重量int box[BOXNUM]= {1,12,9,4,5};//loadflag[i]为1表示第i个箱子需要装载int loadflag[BOXNUM];int bestloadflag[BOXNUM];原创 2009-08-22 22:26:00 · 1189 阅读 · 0 评论 -
正确的二分查找算法
虽然很早就接触二分查找算法,但是要写个正确的二分查找还是很费功夫的。//二分查找。 在num数组中查找key, 若成功,返回下标。若失败,返回-1。参数len从0开始计。第一版有问题的代码如下:int bsearch1(int* num, uint8_t len, int key){ if (len == 0) { return -1; }原创 2012-11-27 18:39:18 · 665 阅读 · 3 评论 -
一个M * N的方格,从左下角走到右上角有多少种走法?
每次只能往右走,或者往上走。这个题目其实是一个组合问题。对方向编号,向上是0,向右是1,那么从左下角走到右上角一定要经过M 个1和N个0。这个题目可以转化为从M+N个盒子中挑出M个盒子有多少种方法。就是C(M+N, M), 或者C(M+N, N).所以2 * 2的格子有C(2+2, 2)=6中走法, 2* 3 的格子有 C(5, 2)=10种走法。原创 2013-06-21 17:21:39 · 14651 阅读 · 7 评论 -
100亿个32位整数中放到一个文件中,找出任一个重复出现的数
问题描述是这样的:在一个文件中存放有100亿个整数,原创 2014-06-04 22:27:41 · 1583 阅读 · 0 评论