随笔分类 -  算法

摘要:一、Bellman-Ford算法用到的“材料”: 1、一个结果数组dis,这个结果数组记录从源点到其他点的最短距离,如dis[10] 表示(加入开始节点标号为1)开始节点1到10号节点的最短距离。 2、C/C++中定义结构体Edge,表示边,内设变量from、to、cost,分别表示这条边的开始标号 阅读全文
posted @ 2018-02-11 13:18 砂糖橘子君 阅读(1919) 评论(0) 推荐(0)
摘要:题目大意: 给一个数n,求出这个数的不重复整数排列。 解题思路: (1)递归求解:栈深度有点高,可以通过记忆+剪枝优化。 (2)初始化二维数组dp,dp[i][j],表示当前输入的数字为i时,排列的第一个数字为j时有几种排列方法。 不难看出 1可以拆分成1+0,只有1种 2可以拆分成2+0,1+1两 阅读全文
posted @ 2018-01-04 19:56 砂糖橘子君 阅读(198) 评论(0) 推荐(0)
摘要:费马小定理 定义:如果p是质数,并且a不能被p整除,那么a^(p-1) ≡ 1 mod p。 (据说现在是小学五年级的奥数定理、、、我大天朝崛起指日可待了、、、) 定理解释:如果p是一个质数(也就是素数),而且a不能被p整除,那么就会有a^(p-1) % p == 1。不过这只是个必要条件,也就是说 阅读全文
posted @ 2016-04-06 18:20 砂糖橘子君 阅读(1341) 评论(0) 推荐(0)
摘要:汉诺塔通项公式证明: 设三个塔分别为A、B、C。并设当A塔初始有n个盘子的时候,转移到C塔需要用T(n)步。 首先,有如下规律: T(0) = 0 (当没有盘子的时候当然为0) T(1) = 1 T(2) = 3 T(3) = 7 ..... T(n) = T(n - 1) + 1 + T(n - 阅读全文
posted @ 2016-04-06 16:24 砂糖橘子君 阅读(4342) 评论(1) 推荐(0)
摘要:快速幂 求a的b次幂,如3^999次幂,最最普通的做法就是嵌套循环,不断累乘,最后得出结果,而快速幂算法可以更快的实现。 题目: 计算a^b = ?. 分析: 把b换成二进制,用位运算计算结果。 代码: 阅读全文
posted @ 2016-04-04 14:04 砂糖橘子君 阅读(430) 评论(0) 推荐(0)
摘要:题目描述: 给出两个多项式,最高次幂分别为n和m,求解这两个系数相乘得到的系数数组。 分析: 最高次幂如果是m和n,那么他们相乘得到的系数数组的最高次幂一定是n+m,对于其他的系数,不妨设a[],b[]是给定的两个系数数组,c[]是求解的答案数组,那么: c[i + j] += a[i] * b[j 阅读全文
posted @ 2016-04-04 12:56 砂糖橘子君 阅读(3089) 评论(1) 推荐(1)
摘要:Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识、、、、在这里和大家分享一下。。。 Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了,这里不再赘述。 在这个算法中,定义了两个数组,一个是dfn数组,一个是low数组,相信大家在这里就晕 阅读全文
posted @ 2016-04-03 18:04 砂糖橘子君 阅读(2297) 评论(0) 推荐(0)
摘要:欧几里得算法: 如果求两个数的最大公约数,那么最一般的求法是设置一个变量i=1,然后i不断加一,如果i加到某个数后两个数都能整除这个数了,然后把这个变量保存下来,然后最后的结果中最大的就是最大公约数. 然而这种方法时间复杂度可想而知有多高,所以一般情况瞎并不用这种方法,那么就有下面的欧几里得算法: 阅读全文
posted @ 2016-03-20 23:10 砂糖橘子君 阅读(448) 评论(0) 推荐(0)
摘要:求两个数的最小公倍数方法:void GCD(A,B)1、公式法:(本人觉得只要记住这一个就可以了,完全能够按照实际要求利用公式法推导出其他方法) A*B = 最大公约数 * 最小公倍数2、比例法: A:B = x : y(约分)所以: A * y = B * x = 最小公倍数3、短除法: 求出两个 阅读全文
posted @ 2016-03-20 22:06 砂糖橘子君 阅读(953) 评论(0) 推荐(0)