算法
KinFungYu
前SCAU ACM校队队员
展开
-
康托展开
康托展开:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!ai为整数,并且0应用实例:{1,2,3,4,...,n}的排列总共有n!种,将它们从小到大排序,怎样知道其中一种排列是有序序列中的第几个?如 {1,2,3} 按从小到大排列一共6个:123 132 213 231 312 321。想知道321是{1,2,3}转载 2013-03-20 20:21:01 · 643 阅读 · 0 评论 -
博弈题目模型总结
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走原创 2013-04-17 21:01:05 · 1084 阅读 · 0 评论 -
次方求模
快速计算乘方的算法,求a的b次方如计算2^13,则传统做法需要进行12次乘法,但是可以优化:把2*2的结果保存起来看看,是不是成了:4*4*4*4*4*4*2 再把4*4的结果保存起来:16*16*16*2 一共5次运算,分别是2*2、4*4和16*16*16*2 这样分析,我们算法因该是只需要计算一半都不到的乘法了。 为了讲清这个算法,再举一个例子2^7:2*2*2*转载 2013-03-21 09:13:10 · 1131 阅读 · 2 评论 -
矩阵连乘详解
矩阵连乘详解--crystal yi既然这篇文章叫做矩阵连乘详解,那么我就不能辜负详解这两个字,只有把一个原来不懂的的人弄懂了,才叫详解。言归正传,首先让我们复习一下矩阵连乘的有关知识。对于矩阵知识很了解的人可以跳过矩阵知识这块内容,不过笔者建议最好复习一下。矩阵知识:矩阵的乘法:矩阵相乘只有在第一个矩阵的列数和第二个矩阵的行数相同時才有定义。假如A转载 2013-06-19 09:29:22 · 3360 阅读 · 0 评论 -
最长不下降序列nlogn算法
O(nlogn)的算法关键是它建立了一个数组temp[],temp[i]表示长度为i的不下降序列中结尾元素的最小值,用top表示数组目前的长度,算法完成后top的值即为最长不下降子序列的长度。设当前的以求出的长度为top,则判断num[i]和temp[top]:1.如果num[i]>=temp[top],即num[i]大于长度为top的序列中的最后一个元素,这样就可以使序列的长度增加1,即原创 2013-05-05 19:55:58 · 914 阅读 · 0 评论 -
二分查找求上界和下界
这是非下降序列的二分查找求下界和上界的方法,非上升序列的方法类似。个人觉得原理就是逼近思想 //二分查找找下界(>=temp的第一个数的下标)#include #include #include #include #include #include #include #include #include using namespace std;in原创 2013-06-24 19:54:12 · 2154 阅读 · 0 评论 -
中缀表达式转换为后缀表达式
中缀表达式转换为后缀表达式转载自http://blog.csdn.net/ssjhust123/article/details/8001651一、后缀表达式求值后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下:1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示:转载 2013-07-13 15:30:37 · 1293 阅读 · 1 评论 -
C++大数模版(转载)
#include #include #include #include using namespace std; #define MAXN 9999#define MAXSIZE 10#define DLEN 4class BigNum{ private: int a[500]; //可以控制大数的位数 int len; //大数长度public转载 2014-07-25 19:37:58 · 637 阅读 · 0 评论 -
后缀数组模版
int s[maxn];int sa[maxn], t[maxn], t2[maxn], c[maxn], n, k;int rank[maxn], height[maxn];void build_sa(int n, int m){ int i, *x = t, *y = t2; for(i = 0; i < m; i++) c[i] = 0; for(i = 0;原创 2014-10-18 21:14:54 · 683 阅读 · 0 评论