旅行售货员问题
有n个完成时间不同的独立任务,m台处理机,n个任务在任意一台处理机上完成及为完成,一台处理机在同一时间只能处理一个任务,要求给定任务时间和处理机数量时,完成所有任务的最短时间。 多机调度问题是一个NP完全问题,
最大团问题-分支界限法遍历所有点构造二叉树;广度遍历树,遍历过程中判断当前结点的点数据时,是否构成完全子图,如果不能则只将右结点加入队列,每次选取队列中完全子图最大的结点作为活结点,无子结点时到达叶子结点,记录为一个完全子图,优先队列法中第一个完全子图即为最优解。package test; import java.util.*; /** * Creat
最大团问题
批处理作业调度-分支界限法
批处理作业调度
流水作业调度问题动态规划解法
单源最短路径-分支界限法-优先队列式。这里使用无回路的有向图,便于构建树。构建好树后,从根结点作为起始源,加入结点队列,然后判断获取队列中最短的路径结点做为活结点,将活结点的所有子结点加入队列,移除活结点。这里需要注意活结点的子结点加入时需要判断是否在现有队列中已存在同一个路径点(就是有向图的点),如果
单源最短路径,关于这个问题的贪心算有点不好理解,分析后续补充,代码也需要后续优化,便于理解package test; import java.util.ArrayList; import java.util.HashMap; import java.util.L
分支界限法解装载问题和解01背包问题十分类似,都是建立树之后广度优先遍历各结点,建立队列,约束条件是第一艘货船的承载能力,最后选择承载重量最大的一个组合,然后将剩余物品全部放在第二艘货船,判断是否可以装下,可以获得结果。package test; import java.util.
有两艘货船,载重分别为w1、w2,物品总重量不超过载重总量w1+w2,问物品是否都可以装下。如,w1=w2=10,物品g1=g2=9,g3=2,则无法装下;w1=w2=5,w3=10,则可以装下。 这是个典型的
现有一个载重为W的货船,集装箱i个,重量分别为wi,在不考虑体积的情况下,要求装载的数量最多。 这是一个简单的最优装载问题,类似01背包问题,但考虑的不是价值而是数量,所以每次选取剩余集装箱中重量最轻的就可以,
分支界限法和回溯法很像,不同之处是回溯法使用深度优先搜索,而分支界限法使用的是广度优先搜索,并使用了队列来记录每次有有效结点,通过入队出队的方式遍历有效结点。分支界限法在从活结点选择下一扩展结点时的不同方法导致不同分支界限法,常见的有队列分支界限法和优先队列分支界限法,这里以队里分支界限法为例。&nbs
回溯算法类似于遍历的求解,但不同于无脑遍历的的地方是它在每一步都判断是否满足约束条件,及回溯点,所以可以理解为有条件的遍历。使用回溯算法求解01背包最优解时需要建立二叉树,树有业务意义的深度为物品数量n,加上根节点总深度为n+1,除了终端节点外,每个叶子节点都有左右两个children节点,left children定义为装入当前物品的情况,righ
背包问题可以使用动态规划获得最优解,动态规划的思路是:通过获得单阶段的最优解后,升级到多阶段,每次升级时都使用上一阶段的最优解计算,避免遍历所有可能时产生的时间消耗。package test; import java.util.ArrayList; import java.util.Collections; impor
今天用贪心算法给出背包问题的一种解,虽然贪心算法不一定是最优解,但是在数据量极大时,贪心算法可以快速获得接近最优解的答案package test; import java.util.ArrayList; import java.util.Collections; import java.util.Compar
马踏棋盘属于算法里的经典问题,这里用递归的方式给出一种解法:package test; /** * Created by saishangmingzhu on 2018/11/25. */ public class Mataqipan
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号