算法总结
tanhaiyuan
这个作者很懒,什么都没留下…
展开
-
博弈论
首先回顾必胜态和必败态的朴素求法:定理 0:一个状态是必败态,当且仅当它的所有后继状态都是必胜态;而一个状态是必胜态,只要它的后继状态有一个以上的必败态即可。证明略去。容易发现下面的定理:定理 1:(a,b) 和 (b, a) 的胜负性是相同的(a转载 2011-09-02 21:56:08 · 573 阅读 · 0 评论 -
最长回文子串o(n)算法
O(n)回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。 这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-lo转载 2011-12-21 13:47:00 · 2853 阅读 · 0 评论 -
【数论】法 雷 数 列
实数包含有理数和无理数,任何有理数都可以表示为p/q(p,q是整数,q!=0)的形式,如果指定一个分数的分母不超过某个值,对于一般的有理数或者无理数,是不可以用一个分数来准确地表示的。我们这里主要讨论,如何找出一对分数p1/q1和p2/q2,使得q1 和q2 小于给定的值n,而p1/q1和p2/q2尽可能接近一个给定的实数.。为了便于说明,我们用C++语言的格式给出问题的定义:函数接口void转载 2011-10-26 22:37:55 · 1998 阅读 · 1 评论 -
全排列生成
一:全排列生成一:没有重复元素的排列1:非字典序的全排列生成:思路:用DFS, 通过每次交换两个元素来生成void swap(int &a, int &b){ int temp; temp=a; a=b; b=temp;}void perm(原创 2011-09-22 15:20:12 · 694 阅读 · 0 评论 -
扩展欧几里得算法
用一个线性组合来表示最大公约数, 即d=gcd(a, b)=ax+by, 要求计算出满足等式的整数x, y;要解决这个问题,就要用到扩展欧几里得算法了。(1)若b=0的话, d= gcd(a, b) =a, 此时x=1, y=0;(2)若b!=0的话, 可令d1=gcd(原创 2011-09-20 13:18:03 · 465 阅读 · 0 评论 -
最大公约数——gcd
这几天看数论, 顺便总结一下; 求最大公约数最容易想到的办法就是枚举,不过这样效率很低, 欧几里德辗转相除法相对来说效率很高而且很简单。 递归代码:int gcd( int a, int b)//递归{ if( b==0 ) re原创 2011-09-20 12:40:30 · 662 阅读 · 0 评论 -
半秒内筛一亿以内的所有素数
【问题描述】: 试编写一个程序,找出2->N之间的所有质数。希望用尽可能快的方法实现。【问题分析】: 这个问题可以有两种解法:一种是用“筛子法”,另一种是“除余法”。 如果要了解“除余法”,请看另一篇文章连接http://blog.csdn.net转载 2011-09-07 21:36:07 · 6589 阅读 · 3 评论 -
取石子问题
取石子问题有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Ba转载 2011-09-02 22:03:54 · 453 阅读 · 0 评论 -
母函数(Generating function)详解
母函数(Generating function)详解BY TANKY WOO – 2010年08月2日POSTED IN: 我的原创|MY ORIGINAL CREATION, 算法|ALGORITHMS最近更新:2011.4.3转载 2011-09-02 22:54:47 · 584 阅读 · 0 评论 -
生成子集
#includeusing namespace std;int visited[101];//arry表示求子集的数组//cur表示搜索当前位置 //n表示数组元素个数 void DFS(int *arry, int cur, int n)//字典序 { for(int i=0; i<cur; i++) if(visited[i]) cout<<a原创 2012-05-24 16:52:12 · 835 阅读 · 0 评论