目录:
求高手帮我用C语言写一个运用贪心和遗传算法求解背包问题的程序...
-1背包: 每个背包只能使用一次或有限次(可转化为一次): A.求最多可放入的重量。 NOIP2001 装箱问题 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
遗传算法将目标函数转换为适应度函数,评估,复制,交叉,变异种群中的个体,并从中选出适应性最强的个体,算法的最优解就是这个个体。具体流程是:初始种群的产生。适应度函数的构造。选择和繁殖。终止条件。
迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
这是一个非常简单的遗传算法源代码,是由Denis Cormier (North Carolina State University)开发的,Sita S.Raghavan (University of North Carolina at Charlotte)修正。代码保证尽可能少,实际上也不必查错。对一特定的应用修正此代码,用户只需改变常数的定义并且定义“评价函数”即可。
实数背包 物品可以一部分放在背包中,那么直接贪心就行了,把物品按性价比(v[i]/w[i])升序放入即为最优解。复杂度O(n+nlogn)整数背包 物品只能整个放入背包,不允许拆开放,用动态规划求解。dp[i,j]表示前i个物品放入容量为j的背包中可以得到的最优解。
解决TSP问题的交叉方法不像其他的那么简单,跟它的编码方法有关系。如果是顺序编码,那么交叉时要考虑到子代个体是否是合法的。一般用顺序交叉方法的比较多。参考资料中为单点交叉方法的代码,两点交叉与之类似,不过是多了一点交叉点而已。
标签: pc28不贪心怎么赢钱
还木有评论哦,快来抢沙发吧~