算法
文章平均质量分 55
yuanyirui
这个作者很懒,什么都没留下…
展开
-
对Hanoi塔问题的理解
汉诺塔的递归算法如下(递归的原理和汉诺为什么可以用递归就不详说了): void hanoi(int n,int A,int B,int C){ if(n>0){ hanoi(n-1,A,C,B); move(n,A,B); hanoi(n-1,C,B,A); }} 可以看出它跟树的中序遍历没有多大区别,在搜索的过程中,只是按照中序遍历的方式把节点输原创 2009-02-13 14:16:00 · 747 阅读 · 0 评论 -
泡泡堂AI,泡泡堂游戏录制与播放开发心得
经过了一个月的有间断的研究和开发,我的泡泡堂从只有漏洞百出的AI版,到可以编辑地图的1.1版,最后到修正和提升了AI和改善了泡泡堂显示界面,并且加入泡泡堂录制和播放功能的泡泡堂1.2版终于面世了。也许大家对AI不大感兴趣,对游戏的录制和播放比较感兴趣,(或者对两者都不感兴趣:))。那我就简要说说AI,详细说说录制和播放吧。首先要说明一点的是,这个游戏最开始的框架不是我做起来的,因为我接触游戏开发也原创 2009-08-27 17:50:00 · 4557 阅读 · 16 评论 -
2*1格子问题
废话少说,代码说话#include static double cnt[12][1<<11];static int trans[16384][2];int rows, cols, ntrans;/* there are ((sqrt(2)+1)^c - (sqrt(2)-1)^c) * (sqrt(2)+2) / 4 transitions * which is t原创 2009-05-29 16:51:00 · 700 阅读 · 0 评论 -
几道数论题
第二类Stirling数n个有类别的球放到m个相同的盒子中,要求不能有空盒,有多少种放法?这道题就是第二类Stirling数的经典例子,表示为S(n,m)。它有递推关系S(n,m)=m*S(n-1,m)+S(n-1,m-1) 其中n,m>=1当盒子数大于球数的时候即m>n有S(n,m)=0 盒子和球的问题这个问题在高中的排列组合中就经常碰到,下面就列原创 2009-02-17 22:55:00 · 1400 阅读 · 1 评论 -
马的Hamilton周游问题,O(N)解决,N表棋盘规模
马的周游这个问题是搜索的经典问题,但是搜索的时间效率极低,并随着棋盘的扩大呈指数级增长,最终导致问题几万年不可解。如果题目放宽要求:1、只需要求出周游的一条路线2、棋盘的长和宽|L-W|有这两个条件就能使得问题复杂度简化,最终能在棋盘规模的复杂度下解决。定义n*n的棋盘的每一个点为图G的顶点V,n*n的棋盘的每一个点和从这个起点一步可达的点的连线为图G的边E。这样图G有n*转载 2009-02-15 14:43:00 · 4932 阅读 · 2 评论 -
循环赛日程表的多边形解法
循环赛要求比赛的每两个选手都要进行一次比赛,而且每个选手每天都要比赛一场。这种题目的解法通常是用分治的思想来做,并且是分治方法解题的经典题目。下面的一种受多边形启发的方法,也能巧妙解决循环赛日程表问题。如图所示,有八个选手要进行循环赛,画七边形,每个点表示一个选手。其中最高点所代表的选手与第八位选手进行比赛,在同一水平线上的选手进行比赛。每天的比赛由旋转一次的多边形决定。这样就刚好能安排符原创 2009-02-15 00:37:00 · 2189 阅读 · 0 评论 -
X数组和Y数组的中位数
给定的X数组和Y数组都是n个元素的有序数组,设计一个O(logn)时间的算法,找出X和Y的2n个数的中位数。(第n小的数)这个题一看就要用二分的思想来做,下面的代码套用二分的思路,大家一定不陌生。bool GetValue(int *X,int *Y,int n,int& value){ int low = 0 , high = n - 1 , mid; while(原创 2009-02-14 17:55:00 · 1963 阅读 · 2 评论 -
排列与字典序值的转换
给定{1,2,3,……,n}的排列为π,其字典序值为rank(π,n)。并且有这样的关系:rank(π,n) = (π[1] - 1)(n - 1)! + rank(π’,n-1)其中,π’中每个元素π’[i] = π[i + 1] – 1 若π[i + 1] > π[1]π’[i] = π[i + 1] 若π[i + 1] π[1]例如序列213除去序列第一个元素原创 2009-02-15 18:26:00 · 1019 阅读 · 0 评论 -
构造格雷码
学过数字电路的应该都认识格雷码,它由n位01字符串表示,相邻两个格雷码只有一位01不同。长度(位)(0,1)串N=101 N=20001 1110 N转载 2009-02-14 20:27:00 · 1765 阅读 · 0 评论 -
最接近中位数的k个数
给定n个互不相同的数组成集合S,以及正整数k,设计一个O(n)时间算法找出S中最接近S的中位数的k个数。 首先假定读者知道找一个无序数列中的第k小的数的select算法,这个算法的时间复杂度是O(n)的。如果给出的n是奇数,则中位数是第n/2个;如果是偶数,则中位数是第n/2和n/2 + 1个的中位数。(也可以无论n是奇是偶,都取n/2)第一步,通过select算法得到这个中位数;原创 2009-02-14 16:37:00 · 2679 阅读 · 0 评论 -
最大值和次大值问题的最优算法
输入n个数,最坏情况下用 n + logn - 2 次比较找出当中的最大值和次大值。解题思想:根据题意出现logn,则肯定用到二分或者堆的思路,但是输入的数没有经过排序,而且题目要求的计算量也不允许排序。这样,就肯定会用到类似堆的思路,但是直接构造堆等同于排序。堆的思想跟竞标赛类似,都是父节点>=()子节点。如果父节点都是从子节点而来,这样就是竞标赛;如果不是,这样就是堆。既然不能排序又不能构原创 2009-02-14 16:20:00 · 4154 阅读 · 0 评论 -
最大间隙问题
给定n个实数x1,x2,x3...xn,求这n个数在实数轴上相邻2个数之间的最大差值,设计最大间隙问题的线性时间算法。利用抽屉原理(或称为鸽舍原理--即有4个苹果放进5个抽屉里面,肯定至少有一个抽屉没有苹果),算法如下:double maxgap(int n,double x[]){ double minx=x[mini(n,x)] , maxx = x[maxi(n,x)]; int转载 2009-02-13 13:04:00 · 1268 阅读 · 0 评论 -
关于3n+1问题的计算效率
while(n>1){ if(n%2 == 1) n=3*n+1; else n=n/2;}该算法的下界是 logn ,算法的计算上界至今未知。算法能否在有限时间结束还是一个问题,有人测试过10^13内的自然数都能在有限步结束。人们猜测,对所有自然数,上述算法均能在有限步结束,但无法给出理论证明,因此无法分析计算时间上界。这个猜想也称为Collatz猜想。转载 2009-02-13 13:00:00 · 2925 阅读 · 4 评论 -
libsvm代码与理论
如果你对模式分类有兴趣,并且对svm有一定的理解,此文和接下来的博文或许对你有帮助。首先libsvm的代码可以在http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载,我在这里介绍的是libsvm的classification部分。这个部分的training部分涉及两个核心过程,选两个alpha和更新这两个algha。上海交通大学的《libsvm2.6程序原创 2009-11-18 21:15:00 · 2962 阅读 · 0 评论