摘要: 生成下一个排列的算法有很多中,用递归来实现是最简单,最明了的。我下面介绍的不是按照递归了实现而是从实际问题分析,总结出的规律。我们知道对于排列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) 编辑