Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >这是什么算法?包装箱/背包?

这是什么算法?包装箱/背包?
EN

Stack Overflow用户
提问于 2012-05-03 04:01:43
回答 1查看 1.1K关注 0票数 4

昨晚我在开发一个应用程序时遇到了一个特殊的问题,我相信这个问题可能有一个有效的算法来解决。有人能提出建议吗?

问题:

也许一张图片会有帮助:http://www.custom-foam-inserts.com/。我有很多东西适合在一个范围内的隔间:我想尽量减少我需要采取的案件数量。

我有一套N件昂贵的电子设备,我想把它们装进特别设计的保护箱里。这些箱子每个都有许多隔间,每个隔间都可以容纳一个物品:其中一些是专门设计用来装一个特定的物品(即相机形状的孔),而有些则是一般的(矩形孔)。我事先知道有C不同大小的舱室和这些是什么大小。

这些箱子有L个不同的布局,每一个至少有一个隔间。布局可以是“两个大长方形隔间和四个小圆形隔间”。

每个隔间大小至少有一个布局,但我有不适合任何舱室大小的项目。每个项目至少适合一个舱室,并可能适合多个不同的舱室:例如,我的DSLR相机可能在一个‘中矩形’室紧密配合,一个松散的适合在一个‘大矩形’和一个完美的适合在一个‘DSLR相机室’,但不会适合一个‘小圆圈’。为此,我列出了适合每个项目的舱室清单。

这些项目具有适度的异构性--例如,可能有50个一个大小的项目,20个另一个大小的项目。

每个盒子有两个成本体积和美元(但是D~与V成正比)。我需要尽量减少其中一个或两个成本,同时把我所有的物品装进箱子里。由于箱子的布局,最优的解决方案可能包含未使用的隔间。如果两个解决方案的体积相同,则选择一个有最多未使用的分区的解决方案。因为每个隔间至少有一个布局,每个项目至少适合一个隔间,所以总是有一个适合所有项目的解决方案。

项目数量:<=2000,平均病例150。舱室数:<= 1000。布局数量:<= 1000。

对这个有什么想法吗?我看过背包和斌的包装算法,我不确定它们是否可行。非常感激的帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-05-03 04:10:22

从问题描述来看,这确实是背包问题,因为您必须最大限度地利用可用空间,同时记住选项的权重。

根据您所追求的目标,您还可以考虑使用遗传算法。由于这个问题是NP完成的,如果您需要添加更多的项目,运行时间最终会爆炸,所以如果我需要与所需时间无关的最佳解决方案,我将主要使用这个方法。

另一方面,遗传算法应该能够在相对较短的时间内提供一些解,但是它所提供的解可能不如背包算法提供的解那么好,所以如果我需要提供一些解的时间有限制,我会选择遗传算法,我不在乎它是否是绝对最好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10430981

复制
相关文章
ORDER BY导致未按预期使用索引
在MySQL中经常出现未按照理想情况使用索引的情况,今天记录一种Order by语句的使用导致未按预期使用索引的情况。
俊才
2019/11/28
2.7K0
【C++】scanf()和scanf_s()函数
scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
用户7886150
2021/04/27
2.6K0
scanf的使用,cin和scanf的区别
对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,关键就是该函数可以按用户指定的格式,把指定的数据显示到显示器屏幕上。该函数原型的一般格式如下: int printf(const char * format, … );
秋名山码神
2022/12/13
1.1K0
scanf的使用,cin和scanf的区别
scanf函数与scanf_s函数
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存泄露。所以vc++2005/2008中提供了scanf_s(),在最新的VS2013中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。 目前最新的c11标准中已经将scanf_s函数“转正”了。 http://msdn.microsoft.com/zh-cn/library/w40768et%28VS.80%29.aspx 如果想继续使用scanf这个不安全的函数可以
landv
2018/05/24
1.1K0
使用scanf限定输入
❝有一个这样的需求就是使用scanf限定输入数字。我们该怎么解决呢? ❞ 答案是使用:%[],表示要读入一个字符集合。 小例子   只限定输入数字。 char string[100]; /* 这里只读取数字。*/ scanf("%[0-9]", string); printf("string = %s\n", string);   键盘输入: 12345abc   打印输出: string = 12345 一些常用限定符 数字集合   除了支持scanf,还支持sscanf和fscanf。
Qt君
2020/06/04
1.3K0
C语言/gets()函数和scanf()函数关于字符串的输入
在C语言中,有很多关于输入字符串的函数。在学习和使用C语言时,我们也无法避免需要输入字符串,因此本文是关于C语言中输入字符串的两个函数 gets() 和 scanf() 的。
用户10788736
2023/10/16
4370
c语言scanf函数用法详解_c语言输入scanf格式
本节介绍输入函数 scanf 的用法。scanf 和 printf 一样,非常重要,而且用得非常多,所以一定要掌握。
全栈程序员站长
2022/11/18
4.5K0
C语言 | scanf函数
“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆
小林C语言
2021/03/23
3.7K0
scanf与gets函数混用
2、scanf在gets前调用,这种情况就会出现问题,当输入完scanf中的变量时,运行到gets函数,则不让输入任何字符
idealclover
2018/10/31
1.4K0
C语言 | scanf函数
在C语言中,输入是以计算机主机为主体而言的,从输入设备向计算机输入数据称为输入,C语言本身不包含输入语句。
小林C语言
2021/03/23
5.5K0
C语言 | scanf函数
C语言输入scanf
输入scanf和输出printf有很多相似的地方,但差别也很大,出错的地方也更多。
用户6755376
2020/03/06
4.4K0
C语言输入scanf
在java中关于使用scanner接受char类型字符的方法
这篇文章上次修改于 394 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 import java.util.Scanner; Scanner scanner=new Scanner(); char sex=scanner.next().charAt(0);
Erwin
2019/12/31
2.9K0
scanf具有的安全隐患
如果存储空间不足,数据能被存储到内存中,但不被保护,printf打印输出字符串是在遇到\0结束,而非根据字符串大小输出
大忽悠爱学习
2021/03/04
9110
vs2019中scanf返回值被忽略_vs2017scanf
百度一下之后大致原因是:scanf()函数在读取时不检查边界,所以可能会造成内存泄漏。有一定的安全隐患。例如代码是
全栈程序员站长
2022/11/17
1.2K0
vs2019中scanf返回值被忽略_vs2017scanf
业绩超预期因子
学术界很早就发现,股票市场存在显著的盈余公告后的价格偏移现象(Post-Earnings Announcement Drift PEAD)。通俗解释来说,投资者对于公司的盈利有一个预期值,如果财报公布后,公司的实际盈利超出了投资者预期,公司的股价会上升,会有明显的超额收益。如果实际盈利低于投资者预期,公司股价会下降,会有明显的负向收益。本文基于这一现象构造盈利超预期因子,并对因子进行测试。后台回复“业绩超预期”获取代码和参考文献,限时免费。
量化小白
2020/03/18
2.9K0
业绩超预期因子
C:02---scanf、printf
你以为你输出了helloworld就掌握了printf,来,我接着带你重新认识printf,我这个人比较爱刚代码,来看第一个代码:
用户3479834
2021/02/03
1.2K0
原创 | 函数 scanf 前世今生
上述代码作何解读? 简单,就是让你从标准输入设备(也就是键盘),敲入一个十进制整数,然后放进变量 age 之中。然后做一惊一乍状爆出你的年龄。
用户2617681
2019/08/08
8280
原创 | 函数 scanf 前世今生
Golang实现类似Scan或者Scanf功能
package main import ( _"errors" "fmt" "io" "os" "syscall" "time" "bytes" _"os/exec" "github.com/docker/docker/pkg/term" ) func main() { Stdin() } func Stdin() { var in io
李海彬
2018/03/20
7890
scanf("%*[\n]%[^\n]",s)是什么意思?
在解释标题的用法之前,先看看其他的用法。 不知道你有没有看到过scanf下面这样的用法:
编程珠玑
2020/12/17
6.8K0
scanf("%*[\n]%[^\n]",s)是什么意思?
C语言中的printf()与scanf()
相比于其它的编程语言,C语言的输入输出功能非常强大,可以按照各种要求进行输入输出。
越陌度阡
2021/10/22
1K0

相似问题

在随机-法线NetLogo中设置相同的种子

11

消除Netlogo行为空间中的错误

219

产生重复的随机代码种子

21

splitTools/create_folds设置随机种子和重复

123

根据重复次数设置数据帧子集

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文