algorithm
xuefeng0707
这个作者很懒,什么都没留下…
展开
-
动态规划 - 0-1背包问题
有一个背包,容量为c。有n个物体X0,X1,X2,...,Xn-1,重量分别为W0,W1,W2,...,Wn-1,价值分别为V0,V1,V2,...,Vn-1。将这n个物体中的任意几个放入背包,使得在不超过背包容量的情况下,背包中的物体总价值最大。数学描述:c>0Wi>0, Vi>0, 0求:[X0,X1,X2,...,Xn-1],其中Xi=0或1,使得X0*V0+X1*V原创 2012-08-04 17:36:42 · 935 阅读 · 0 评论 -
贪心算法 - 哈夫曼编码 Huffman
哈夫曼编码:一种字符编码方式,常用于数据文件压缩。压缩率通常在20%~90%。主要思想:采取可变长编码方式,对文件中出现次数多的字符采取比较短的编码,对于出现次数少的字符采取比较长的编码,可以有效地减小总的编码长度。例如,在英文中,e的出现频率最高,z的出现频率最低,所以可以用最短的编码来表示e,用最长的编码表示z。例子:一个文件包含100 000个字符,且仅含有a,b,c原创 2012-08-08 23:14:18 · 9111 阅读 · 0 评论 -
贪心算法 - 最小生成树 Kruskal算法
关于最小生成树的概念,请参考前一篇文章:Prim算法。Kruskal算法:不停地循环,每一次都寻找两个顶点,这两个顶点不在同一个真子集里,且边上的权值最小。把找到的这两个顶点联合起来。初始时,每个顶点各自属于自己的子集合,共n个子集合。每一步操作,都会将两个子集合融合成一个,进而减少一个子集合。结束时,所有的顶点都在同一个子集合里,这个子集合就是最小生成树。例子:原创 2012-08-07 23:36:19 · 5043 阅读 · 0 评论 -
贪心算法 - 最小生成树 Prim算法
一个无向带权图G=(V,E),其中n个顶点Vertex,以及连接各个顶点之间的边Edge,可能有些顶点之间没有边,每条边上的权值都是非负值。生成树:G的一个子图,包含了所有的Vertex,和部分的Edge。最小生成树:所有的生成树中,各条Edge上的权值总和最小的一个。例子:设计通信网络时,各个城市之间铺设线路,最经济的方案。最小生成树性质:G=(V,E),S是V的原创 2012-08-07 21:05:47 · 3066 阅读 · 0 评论 -
贪心算法 - 单源最短路径 Dijkstra
单源最短路径:一个带权有向图G=(V,E),其中n个顶点Vertex,以及连接各个顶点之间的边Edge,可能有些顶点之间没有边,每条边上的权值都是非负值。给定其中的一个顶点,称之为源。求出源到其他所有顶点之间的最短路径。解法:Dijkstra算法以源为起始顶点集合S,向外扩张,将从源到其他顶点且只经过S中顶点的路径,称为特殊路径。每次都将S之外的顶点中的 特原创 2012-08-06 21:54:35 · 1260 阅读 · 0 评论 -
贪心算法 - 背包问题
当一个问题具有最优子结构性质时,可以用动态规划算法来求最优解。但有时候,有更便捷的方法。毕竟动态规划算法需要计算出所有的子问题后,才能根据子问题算出中个问题的最优解。以背包问题为例。先赘述下 0-1背包问题:有一个背包,容量为c。有n个物体X0,X1,X2,...,Xn-1,重量分别为W0,W1,W2,...,Wn-1,价值分别为V0,V1,V2,...,Vn-1。将这原创 2012-08-05 23:03:03 · 1528 阅读 · 0 评论 -
动态规划 基本解法
适用于最优化问题,求解某个问题的最优值(1)最优子结构整个问题的最优解,一定由一些子问题的最优解组成。此为动态规划算法的基础。(2)建立递归关系自顶向下,建立递归关系,至最原子态的问题(3)自底向上,计算各个子问题的最优解由最原子态的问题的最优解开始,构建全部子问题的最优解,并记录过程(4)求解整个问题的最优解由全部子问题的最优解,自顶向下,组合出整原创 2012-08-05 21:14:28 · 807 阅读 · 0 评论 -
动态规划 - 最大子段和
给定一个数组A[A0,A1,A2,...,An],求数组中 连续子段之和 的最大值。(1)最简单的算法:穷举法计算所有的连续子段之和,得出最大值// 穷举法:计算所有的子序列和// O(n^3)public static int maxSum1(int[] data) { int max = data[0], tmp; for (int i = 0; i < data.le原创 2012-08-02 21:18:00 · 1232 阅读 · 0 评论 -
动态规划 - 矩阵连乘问题
给定n+1个矩阵[A0, A1, A2, ……, An-1],其中Ai与Ai+1是可乘的,i=0,1,2,...,n-2。矩阵乘法满足结合律。考察这n个矩阵的连乘积,得出运算次数最少的结合。首先,考虑两个矩阵相乘。如果A、B两个矩阵可以相乘,那么A、B的形式必定满足:A[p][q]、B[q][r],设C=A*B,那么C满足C[p][r]C[i][j]=A[i][0]*B[0][原创 2012-08-03 23:59:04 · 1258 阅读 · 0 评论 -
动态规划 - 最长公共子序列
数组X = [X0, X1, X2,... Xm]子序列为 [Xi,Xj,Xk,...,Xz],其中,0数组Y = [Y0, Y1, Y2,... Yn]求X,Y的公共子序列中的最长的一个。例子:X = [A, B, C, B, D, A, B]Y = [B, D, C, A, B, A][B, C, A]是X和Y的一个公共子序列,但不是最长公共子序列[B, C原创 2012-08-02 23:37:06 · 653 阅读 · 0 评论 -
贪心算法 - 删数问题
删数问题:给定一个n位正整数a,删掉其中任意k(k找出剩下的数字最小的删树方案。输入:a>0,n位,0输出:最小的剩下的数。贪心策略:最近下降点优先。自左向右逐位扫描数字a,找到第i位,使得a[i]>a[i+1],那么删掉第i位后,剩下的是当前数字删掉1位后的最小值。迭代k次,删掉k位即可。例子:输入:a=178543,k=4178543 -> 1754原创 2012-08-09 20:29:40 · 7018 阅读 · 0 评论