
算法设计学习笔记
文章平均质量分 85
-小透明-
记录自己的一些学习笔记。
展开
-
回溯法----0-1背包问题
[算法描述]0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP完全问题。0-1背包问题的解空间可以用子集树表示。解0-1背包问题的回溯法与解装载问题的回溯法十分相似。在搜索解空间树时,只要其左儿子节点是一个可行的节点,搜索就进入其左子树;而当右子树中有可能包含最优解时才进入右子树搜索,否则将右子树剪去。设r是当前剩余物品价值总和;cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,可剪去右子树。计算右子树中解的上界的更好的办法是,将剩余物品依其单位重量价值排序,然后依原创 2021-11-05 22:35:21 · 55092 阅读 · 23 评论 -
动态规划与贪心---0-1背包与背包
问题描述:给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为c。问:应该如何选择装入背包的物品,使得装入背包的物品总价值最大?原创 2021-10-29 13:24:42 · 3673 阅读 · 0 评论 -
动态规划之流水作业调度问题
问题描述:n个作业{1,2,3....,n}要在两台机器M1,M2组成的流水线上加工完成。每个作业的加工顺序都是先在M1上加工,然后在M2上作业加工。M1,M2加工作也i所需的时间分别为ai和bi(1<=i<=n)。流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。一个最优调度应该使机器M1没有空闲时间,且机器M2的空闲时间最少,一般情况下,机器M2上会出现 机器空闲 和 作业积压 两种情况。用m(a,b原创 2021-10-17 14:15:35 · 5462 阅读 · 1 评论 -
分治法与递归---众数问题
分治法基本思想:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立(区别于动态规划)且与原问题相同。递归解决这些子问题,然后将各子问题的解合并(不存在相互利用)得到原问题的解。下面以求π的前200位众数为例,来理解一下吧!问题描述:1. 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5},S的众数是2,重数是3。设计算法计算对于给定的由n个自然数组成的多重集S的众数及其重数。要求:从inp原创 2021-10-16 14:52:58 · 4557 阅读 · 1 评论 -
动态规划之矩阵连乘
两个矩阵相乘:设A为ra*ca的矩阵,B为rb*cb的矩阵,C=A*B,求C首先数组a[ra][ca]、b[rb][cb]、c[r][c]分别存储矩阵A,B,C(r=ra,cb=c)if(ca!=rb) 两个矩阵不能相乘,else A的第一行与B的第一列对应位置相乘再相加void MatrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb, int cb){ //矩阵相乘 if(ra != cb) ....原创 2021-10-15 23:19:05 · 2448 阅读 · 0 评论