背包优化算法
A. 背包问题用分治算法怎么解决
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。
我的想法是,比如背包承重是m,物品t[]分别是t1,t2,...tn,
算法pakage(m,t[],p[]),最简单的算法思路就是把物品ti(1<=i<=n)放入背包,然后问题就变成在背包m-ti的承重下,盛放物品newt[](newt[]=t[]-ti),用递归方法可以很简单的描述,最后p[]就是得到的结果.但是这么做算法复杂度非常高,所以必须优化。只是给你提供一个思路,希望有用
pakage(m,t[],p[]){
if(m==0||t.length()==0){
return;
}
if(null!=t){
for(int i=0;i<t.length;i++){
//把t[i]放入背包
//newt[]=t-t[i];
package(m-t[i],newt[],p[]);
}
}
}
B. 背包问题的发展历程及研究现状
背包问题是组合优化学科中一个经典而着名的问题,它的研究价值不言而喻,吸引了众多专家学者从各个角度开展对其的研究工作,各种算法设计思想也应运而生。由于背包问题的NP完全性,如何在算法的时间效率和求解精度上取得有效的平衡,成为背包问题算法设计主要的考虑因素。数据挖掘是近几年信息领域发展最快的技术之一。由于数据挖掘具有强大的发现有用知识的功能,可以利用它来发现背包问题解的相似的状态空间,然后进行约减,从而克服背包问题的NP困难性。
背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。
01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }
f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
Pi表示第i件物品的价值。
决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?
C. C语言算法求助:背包问题
//如果每种商品只有一件,是0-1背包问题
读入的数据N代表物品个数
V代表背包容量。
//对于你的例子
,输入为
//5
16
//2
3
//3
2
//4
3
//5
7
//6
9
//输出为21
#include
<iostream>
using
namespace
std;
#define
MAXSIZE
1000
int
f[MAXSIZE
+
1],
c[MAXSIZE
+
1],
w[MAXSIZE
+
1];
int
main()
{
int
N,
V;
cin
>>
N
>>
V;
int
i
=
1;
for
(;
i
<=
N;
++i)
{
cin
>>
c[i]
>>
w[i];
}
for
(i
=
1;
i
<=
N;
++i)
{
for
(int
v
=
V;
v
>=
c[i];
--v)
//c[i]可优化为bound,
bound
=
max
{V
-
sum
c[i,...n],
c[i]}
{
f[v]
=
(f[v]
>
f[v
-
c[i]]
+
w[i]
?
f[v]
:
f[v
-
c[i]]
+
w[i]);
}
}
//当i=N时,可以跳出循环单独计算F[V]
cout
<<
f[V]
<<
'\n';
system("pause");
return
0;
}
//如果每种可以有多个,是完全背包问题,
D. 用C/C++实现组合算法,背包问题以及优化算法
我有大量算法代码。。搞ACM的飘过~~
我695033480,咱们可互相探讨算法知识。
E. 背包动态规划算法怎么输出选择了哪个物品,将选择的物品一一输出,怎么写代码
抽象之后问题转化为求一个最优化数组,x1,x2,...,xn的0-1序列
具体的步骤:
定义v[i,w]为把前i个物体中的若干个,放到容量为w的背包里产生的最大价值
wi为第i个物品的大小
vi为第i个物品的价值
1)v[0,w] = 0, 背包里面没有东西,背包容量为w, 价值为0
2)v[i, 0] = 0, 背包容量为0,不论i为多少,价值均为0
3)对于第i个物品有两种选择,放进背包或者不放
如果wi > w, 即背包容量不够放进第i个物品 v[i,w] = v[i-1,w];
如果wi<= w, 即背包容量还可以放进第i个物品,可以选择放或者不放,选择的标准就是让总价值最大
v[i,w] = max( v[i-1,w], ( v[i-1, w - wi ] + vi ) );
同时,记录v[i,w]的x1、x2、x3...xn的值(每个是0或者1)。这里需要用一个三维数组保存了。
不知道lz看懂没有
F. 背包问题的目标函数和贪心算法最优化量度相同吗
背包问题的目标函数和贪心算法最优化量度相同吗?
不相同。目标函数:获得最大利润。最优量度:最大利润/重量比
G. 什么是背包算法啊可以说的详细一点吗谢谢大家了```
该算法是根据数学上的背包问题设计的。背包问题是一个最优化问题,即对一个给定空间或负重的背包和许多大小不一的物体,哪些物体放入背包才能使得浪费的背包空间或负重最小?在背包很小和物体数目较少时,这个问题还比较容易解决;但当背包很大且有很多个物体时,问题的求解就十分困难。通常,这个问题会有一个或者多个解,也有可能根本没有解。
1977年,Merkle与Hellman合作设计了使用背包问题实现信息加密的方法。其工作原理是:假定甲想加密,则先产生一个较易求解的背包问题,并用它的解作为专用密钥;然后从这个问题出发,生成另一个难解的背包问题,并作为公共密钥。如果乙想向甲发送报文,乙就可以使用难解的背包问题对报文进行加密,由于这个问题十分难解,所以一般没有人能够破译密文;甲收到密文后,可以使用易解的专用密钥解密。
该算法提出以后,经过多年的探讨和研究,最终发现了它的一个致命错误,使之失去了任何保密的实用价值。