04 2013 档案

摘要:生成下一个排列的算法有很多中,用递归来实现是最简单,最明了的。我下面介绍的不是按照递归了实现而是从实际问题分析,总结出的规律。我们知道对于排列a1a2a3......an,如果aj a j +2.....an,因为aj 是最后一个不满足这个等式的!这样就生成了下一个排列,我们只需把这代码运行n! ... 阅读全文
posted @ 2013-04-30 23:13 算法黑魔王 阅读(210) 评论(0) 推荐(0) 编辑
摘要:范德蒙很等式 ,所谓的范德蒙很等式,其实是基于这样一个问题:有两个集合,元素个数分别为m,n,现在重中选出一共r个元素问有几种选择方式,当然是C(m + n,r),其实它有等于C(m,k) + C(n,r - k) (k = 0....r)k的不同取值的连加只和,为什么呢?假设在m中取k个,n中就必... 阅读全文
posted @ 2013-04-30 22:52 算法黑魔王 阅读(117) 评论(0) 推荐(0) 编辑
摘要:大家知道帕斯卡三角形吗?它就是基于帕斯卡很等式的。帕斯卡恒等式其实很像动态规划,个人觉得。计算C(n + 1,r)的值表示为C(n + 1,r) = C(n,r - 1) + C(n,r);为什么?你能证明吗,其实证明很简单,我们知道C(n + 1,r)是在n + 1个元素中选择r个元素的无重复组合... 阅读全文
posted @ 2013-04-30 22:45 算法黑魔王 阅读(372) 评论(0) 推荐(0) 编辑
摘要:我们知道求图的最短路有Dijkstra应用于无负权的算法,也有应用于有负权的Bellman0-Ford算法,但是当源点有多个呢?难道我们要调用n次的Dijkstra算法?有没有其它的算法呢?这是当然的,Floyd-Warshall就是用来解决这个问题的,也许有学过的人会说这个算法的效率太低,为O(n... 阅读全文
posted @ 2013-04-30 22:33 算法黑魔王 阅读(242) 评论(0) 推荐(0) 编辑
摘要:下面代码为最简单的Bellman-Ford算法的表示,可以用队列进行优化。#include #define MAXN 1000int u[MAXN + 1];int v[MAXN + 1];int w[MAXN + 1];int d[MAXN + 1];int n,m;int main(){ whi... 阅读全文
posted @ 2013-04-29 17:09 算法黑魔王 阅读(181) 评论(0) 推荐(0) 编辑
摘要:Dijksta算法中,如果我们采用的是邻接矩阵来存的,第一点浪费的空间比较多,第二点我们知道算法的时间复杂度在O(n*n),这样的算法可以说并不是很好,所以我们考虑优化它,那么可以从哪些地方优化呢,首先我们可以优化存储结构,采用邻接表来存储,其次我们可以用优先队列来排序大小,其时间复杂度大大降低。代... 阅读全文
posted @ 2013-04-29 02:26 算法黑魔王 阅读(206) 评论(0) 推荐(0) 编辑
摘要:在for循环中,我们有时会想要在for循环中多个地方,改变当前控制for循环变量的值,让它按照这个值重新循环。一个解决方法是,用一个布尔值isChangeI,在改变后没这个值设置为true,最后再用if(isChangeI)判断,如果为真,则变量减减,这是因为在这从循环结束时,变量i会自动加1,从而... 阅读全文
posted @ 2013-04-28 12:39 算法黑魔王 阅读(269) 评论(0) 推荐(0) 编辑
摘要:最短路径,其实就是求我们日常生活中,从某点到达某点的最短路径,Dijkstra用了一种变通的方式,它是求出从源点到达所有点的最短路径长度。 分析:这个算法采用的是贪心思想,而贪心算法能否达到最后,有两个必要不充分条件1.必须要有最优子结构 2.必须具备贪心选择属性1.最优子结构:我们设d(i,j)表... 阅读全文
posted @ 2013-04-26 11:03 算法黑魔王 阅读(194) 评论(0) 推荐(0) 编辑
摘要:可重复组合应用范围十分广泛,如计算一元多项式的解的个数,如,用来计算程序的复杂程度等。let me show you请读下面这段代码k = 0;for(int i1 = 1 ; i1 = i1 >= i2>= i3 >=....im >=1也就是说这个特定序列的个数,其实是{1,2,3,....,n... 阅读全文
posted @ 2013-04-24 22:27 算法黑魔王 阅读(202) 评论(0) 推荐(0) 编辑
摘要:这是利用并查集实现的比较高效的Kruskal算法,用于算出最小生成树的权!注意该算法并没有维护最小生成树的形态,而只是算出其权值而已,所以离实际应用还有距离!#include #include #define MAXN 1000int v[MAXN];int u[MAXN];int w[MAXN];... 阅读全文
posted @ 2013-04-23 23:21 算法黑魔王 阅读(135) 评论(0) 推荐(0) 编辑
摘要:我们都知道没有重复的组合,其计算方法本质上就在有n个元素的集合中选则r个元素的子集个数,所以可以推出其计算公式为C(n,r)至于它的公式推导,可以这样看,我们可以先选出这些子集后,对这些r个元素的集合,进行没有重复的排列也就是p(r,r).则从n个元素的集合中无重复的进行r排列,即p(n,r) = ... 阅读全文
posted @ 2013-04-23 22:58 算法黑魔王 阅读(316) 评论(0) 推荐(0) 编辑
摘要:形如6*(2+3)+9计算其值,要是在面向对象的语言中,用脱窗口的方法是很好解决的,是不。不过我们要写的是算法。思想:通过观察表达式我们可以发现一个规律,就是我们可以先找到最后运算的符号,然后计算其左边,其右边,接着把它连接如符号计算。这个思想和简单,也很容易理解,其实这个思想所建立的树也就是后缀树... 阅读全文
posted @ 2013-04-23 10:58 算法黑魔王 阅读(213) 评论(0) 推荐(0) 编辑
摘要:给结点分别编号,输入这个无向图的的边,它只有n - 1条边,所以本质上也是树,但是我们还没有确定树的root的结点,下面我们来构造一颗树。我们用邻接矩阵来存下整个图,这里用C++里的vector这中数据结构,它是可以变长的,所以存下之后,空间复杂度就不是n * n了,而是n。给出一组数据:一共8个结... 阅读全文
posted @ 2013-04-22 14:47 算法黑魔王 阅读(533) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-21 16:23 算法黑魔王 阅读(101) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-21 16:22 算法黑魔王 阅读(102) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-21 16:22 算法黑魔王 阅读(112) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-21 16:21 算法黑魔王 阅读(105) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-21 16:20 算法黑魔王 阅读(90) 评论(0) 推荐(0) 编辑
摘要:由帕斯卡恒等式我们可以很轻易的总结出杨辉三角形的规律,其实这个三角形也叫帕斯卡三角形。帕斯卡i恒等式:即(n + 1)(k) = (n)(k) + (n)(k - 1),这个恒等式很好证明也很容易理解,我们采用组合证明来证明它,对于某集合有n + 1个元素,求其有k个元素的子集个数即为(n + 1)... 阅读全文
posted @ 2013-04-21 16:19 算法黑魔王 阅读(443) 评论(0) 推荐(0) 编辑
摘要:所谓的幂取模就是a ^ n mod m的值。(m 小于a ^n的位数)我们可以很容易想到对于要计算这个可以采用分治思想,优化算法,也就是计算a ^ n,我们只需要计算 a ^ n/2依次类推,于是有如下代码:#include int pow_mod(int a,int n,int m){ if(n ... 阅读全文
posted @ 2013-04-21 11:18 算法黑魔王 阅读(159) 评论(0) 推荐(0) 编辑
摘要:与直线上的点本质一样,不再写了。 阅读全文
posted @ 2013-04-21 11:18 算法黑魔王 阅读(95) 评论(0) 推荐(0) 编辑
摘要:First:我们有如下公式:(a + b) mod n = ((a mod n) + (b mod n) ) mod n;(a - b) mod n = ((a mod n) - (b mod n) + n) mod n;ab mod n = (a mod n)(b mod n)mod n注意第二个... 阅读全文
posted @ 2013-04-21 11:17 算法黑魔王 阅读(201) 评论(0) 推荐(0) 编辑
摘要:#include #include #define MAXN 1000char n[MAXN];int m;int main(){ scanf("%s%d",n,&m); int len = strlen(n); int ans = 0; for(int i = 0 ; i < len; i++)... 阅读全文
posted @ 2013-04-21 11:17 算法黑魔王 阅读(147) 评论(0) 推荐(0) 编辑
摘要:首先我们由欧几里德拓展算法可以求得一组解(d,x,y),而这组解通过与ax + by + c = 0中的c / d,如果c是d的倍数则这个点是直线上的一个解。分析:设a,b,c为任意整数,g = gcd(a,b),方程ax + by = g的一组解是(x0,y0),则当c是g的倍数时ax + by ... 阅读全文
posted @ 2013-04-21 11:15 算法黑魔王 阅读(150) 评论(0) 推荐(0) 编辑
摘要:扩展欧几里德算法主要用来求ax + by = d这样的等式的整数解,当且仅当gcd(a,b) = d时该算法可直接求该等式,当gcd(a,b) != d时,可先求ax + by = gcd(a,b),然后按照进行值统一法,见解求解。首先统一如下知识1. a mod b = a - floor(a /... 阅读全文
posted @ 2013-04-20 23:22 算法黑魔王 阅读(189) 评论(0) 推荐(0) 编辑
摘要:我们介绍一下素数筛选法。给你1---n的连续整数,把这些数中的素数筛选出来,用到的思路很简单。其原理基于,对于数p如果p的倍数存在与表中,则这个p的倍数一定不是素数,我们可以把它删除,但是这样删除的干净吗?这是个好问题,我们可以从小到大,从2开始枚举,至于1为什么不行,想想也应该能明白吧,然后可以用... 阅读全文
posted @ 2013-04-20 17:39 算法黑魔王 阅读(302) 评论(0) 推荐(0) 编辑
摘要:题目:给出正整数n和m,区间[n,m]内的“无平方因子”的数有多少个?整数p无平方因子当且仅当不存在k > 1,使得p是k * k的倍数。1 #include #include #define MAXN 100000000int vis[MAXN]; int main(){ int n,m; whi... 阅读全文
posted @ 2013-04-20 16:35 算法黑魔王 阅读(369) 评论(0) 推荐(0) 编辑
摘要:这道题目,读了许久,都没明白过来为什么判断表达式的值能否为整数,只要判断E = x1/(x2/x3/....xk) = x1 * x3 * ...*xk / x2是否为整数。后来才明白,其实是这样的,无论你怎么加括号下x2都必然在分母位置,要证明这个可以用数学归纳法去证明,这里不再证明,但你可以试试... 阅读全文
posted @ 2013-04-20 16:34 算法黑魔王 阅读(250) 评论(0) 推荐(0) 编辑
摘要:1.有状态转移方程为f(i,j) = max(f(i,k) + f(k,j) + w(i,j,k));f(i,j)表示从vi到vj的简单通路(我们默认vj指向vi),这样才能构成凸多边形,同时表示在这个凸多边形中权和的最大值。 2.由3边的凸多边形也就是三角形开始递推上去,构建整个动态规划。#inc... 阅读全文
posted @ 2013-04-16 23:44 算法黑魔王 阅读(260) 评论(0) 推荐(0) 编辑
摘要:waiting 阅读全文
posted @ 2013-04-16 12:19 算法黑魔王 阅读(89) 评论(0) 推荐(0) 编辑
摘要:waiting........................................ 阅读全文
posted @ 2013-04-16 12:18 算法黑魔王 阅读(204) 评论(0) 推荐(0) 编辑
摘要:#include #include #define MAXLEN 10001#define COINLEN 101int V[COINLEN];int vis[MAXLEN];int d[MAXLEN];int n;int dpmax(int s);int dpmin(int s);int main... 阅读全文
posted @ 2013-04-12 13:36 算法黑魔王 阅读(200) 评论(0) 推荐(0) 编辑
摘要:终于把Huffman算法实现了#include #include #include typedef struct huffman{ int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;int n;char buf[MAX_LEN];vo... 阅读全文
posted @ 2013-04-08 23:33 算法黑魔王 阅读(268) 评论(0) 推荐(0) 编辑
摘要:题目的分析被说得有点绕。自己理解是这样,首先由题目我们知道选择的区间都是相互不相交的,除这之外,我们的目标是尽量的让选择的区间达到最大化。所以我们可以先对齐排序,因为输入是随机的。假设每个区间表示为(x,y)我们可以选择按照x排序所有区间,也可以选择按照y来排序所有区间。而不管选择哪一个来排序,其原... 阅读全文
posted @ 2013-04-05 23:09 算法黑魔王 阅读(1246) 评论(0) 推荐(0) 编辑