背包问题

简介: 背包问题的描述如下:  已知有n种物品和一个可容纳m重量的背包,每种物品i的重量为wi。假定将物品i的一部分xi放人背包就会得到pixi的效益,0≤xi≤1,pi>0。采用怎样的装包方法才会使装入背包物品的总效益最大呢?显然,由于背包容量是m,因此,要求所有选中要装入背包的物品总重量不超过m。

背包问题的描述如下:
  已知有n种物品和一个可容纳m重量的背包,每种物品i的重量为wi。假定将物品i的一部分xi放人背包就会得到pixi的效益,0≤xi≤1,pi>0。采用怎样的装包方法才会使装入背包物品的总效益最大呢?显然,由于背包容量是m,因此,要求所有选中要装入背包的物品总重量不超过m。如果这n件物品的总重量不超过m,则把所有物品装入背包自然获得最大效益。如果这些物品重量的和大于m,则在这种情况下该如何装包呢?这是本节所要解决的问题。根据以上讨论,可将问题形式描述如下:
极 大 化: Σpixi (4.1)
1≤i≤n
约束条件:Σ wixi ≤m (4.2)
1≤i≤n
0≤xi≤1,pi>0,wi>0,1≤i≤n (4.3)
其中,(4.1)式是目标函数,(4.2)和(4.3)是约束条件。满足约束条件的任一集合(x1, …, xn)是一个可行解(即能装下);使目标函数取最大值的可行解是最优解。

 

背包问题的贪心算法:

void Greedy_Knapsack(float p[],float w[],float m[],float x[],int n) {
//p(1:n)和w(1:n)分别含有按p(i)/w(i)≥p(i+1)/w(i+l)排序的 n件物品的
//效益值和重量。m是背包的容量大小,而x(1:n)是解向量
int i;float cu; //cu是背包的剩余容量
for(i=1;i=n;++i) x[i] = 0//将解向量初始化为零
cu = m; //将背包剩余容量cu设成m
for(i=1;i=n;++i) {
if(w[i]>cu) breakelse {x[i] = 1;cu = cu - w[i];}
};//for
if(i≤n) { x(i) = cu/w(i);
return x[];
}// Greedy_Knapsack

 

 

 

 有关背包问题还有好几种解法,这里的代码也没有加上去,值得继续深究。

相关文章
|
Cloud Native 持续交付 测试技术
ALPD——驱动业务创新的精益产品开发
ALPD——驱动业务创新的精益产品开发
7115 0
ALPD——驱动业务创新的精益产品开发
|
自动驾驶 物联网 5G
|
NoSQL MongoDB 数据库
MongoDB最新版本是什么?
【6月更文挑战第8天】MongoDB最新版本是什么?
701 6
|
机器学习/深度学习 人工智能 算法
在进行YOLOv3模型部署时,有哪些常见的硬件平台选择和它们的优缺点是什么?
在进行YOLOv3模型部署时,有哪些常见的硬件平台选择和它们的优缺点是什么?
|
存储 安全 芯片
封装之打线简介
介绍封装打线的原理,常用材料的优缺点,关键部件,wire bonding 过程,主要参数,线形,线长和主要测试方法。
13546 3
封装之打线简介
|
存储 数据库 数据安全/隐私保护
SpringSecurity6从入门到实战之登录表单的提交
SpringSecurity6 教程探讨了登录表单提交的源码流程。当提交登录表单时,`UsernamePasswordAuthenticationFilter` 负责处理认证,它从请求中获取 `username` 和 `password` 参数。然后,`AuthenticationManager` 的 `authenticate()` 方法被调用,进一步委托给 `AuthenticationProvider`,通常是 `DaoAuthenticationProvider`。`DaoAuthenticationProvider` 使用 `UserDetailsService`(如 `InMemo
|
人工智能
阿里国际站推出AI极简出海计划
【2月更文挑战第19天】阿里国际站推出AI极简出海计划
402 1
阿里国际站推出AI极简出海计划
|
关系型数据库 MySQL 数据库
什么是xtrabackup工具?
【5月更文挑战第13天】什么是xtrabackup工具?
245 0
|
小程序 JavaScript Java
基于微信小程序的加油站服务管理系统设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的加油站服务管理系统设计与实现(源码+lw+部署文档+讲解等)
365 0
|
算法 编译器
渐进符号 big-O、big-Ω、big-Θ
算法分析 渐进符号 big-O、big-Ω、big-Θ
1404 0
渐进符号 big-O、big-Ω、big-Θ