Bin packing(装箱问题)

Problem:给定n件物品和k个箱子,每一个箱子的容量为1,每一件物品的大小w为(0,1),要求使用最少数目的箱子来装上全部的物品。

这个问题是NPC问题,只有approximation(近似)算法。

一个2-approximation的多项式算法。

算法:

先打开一个箱子,然后逐一放入物品,如果当前的物品没有一个已打开的箱子可以放入,那么就新打开一个箱子来装它。

算法是2-approximation的,证明:

假设最优解需要B*个箱子,上述算法需要B个。那么,考虑使用上述算法的完成情况,至少会有B-1个箱子是半满的(箱子使用了多余一半的容量),这是因为,如果有两个箱子使用量不足一半,那么根据算法,后一个箱子的物品要被放入第一个箱子,因此上述结论正确。那么全部物品的总量S>(B-1)*0.5,即,B-1<2*S,又考虑到B是整数,则B-1<=B,因此有B<=2*S,而S<=B*,所以B<=2*B,因此是2-approximation算法。

【算法理论】bin packing 装箱问题相关推荐

  1. Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP

    题目: 给定n(1≤n≤24)个物品,重量分别为wi,装进一些容量为S(S<1e8)的背包,最少需要多少个背包? 转载于:https://www.cnblogs.com/zinyy/p/9332 ...

  2. java实现 一维装箱问题_装箱问题(Bin packing problem)

    问题的定义 装箱问题(Bin packing problem),又称集装优化,是一个利用运筹学去解决实际生活的的经典问题.在维基百科的定义如下: In the bin packing problem, ...

  3. Google OR-Tools(六) 装箱问题 Bin Packing

    本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法. 装箱问题的描述是要将一组给定尺寸的物品放置到具有固定容量的容器中,一般情况下由于容器有容量限制,不可能放入所有物品,那么 ...

  4. 【论文阅读】(2022)A goal-driven ruin and recreate heuristic for the 2D variable-sized bin packing prob...

    文章目录 一.Abstract 摘要 二.Introduction 介绍 三.Solution representation 解决方案的表示 四.Ruin and recreate heuristic ...

  5. 【白话机器学习】算法理论+实战之LightGBM算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  6. 【白话机器学习】算法理论+实战之Xgboost算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  7. 一步步教你轻松学朴素贝叶斯模型算法理论篇1

    一步步教你轻松学朴素贝叶斯模型理论篇1 (白宁超2018年9月3日17:51:32) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...

  8. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题

    简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...

  9. 【白话机器学习】算法理论+实战之PageRank算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

最新文章

  1. C++ VS2010 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项
  2. Android应用程序框架
  3. 数据降维(特征提取)和特征选择有什么区别?
  4. 历史上线程的3种实现模型
  5. consul 命令行参数
  6. 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】
  7. 根据录入的计算公式计算_工业铝型材承重计算
  8. 利用顺序栈解决括号匹配问题(c++)-- 数据结构
  9. 什么是lambda(函数)?
  10. 小白成长建议(9)-苞丁解牛
  11. mysql更新多条数据_mysql 一次更新多行(多条记录)
  12. SecurityError: Blocked a frame with origin from accessing a cross-origin frame
  13. 记录一个修复ubuntu系统主机前置耳机孔没有声音的方法
  14. SSD固态硬盘健康状况检测工具SSDReporter
  15. syn包发送(拒绝攻击,但是有问题)
  16. mysql数据库对象是什么意思_数据库对象什么意思
  17. python语句分号_你知道分号在各种编程语言中的作用吗?
  18. CSS3+JavaScript效果:胶卷式放映
  19. 第七章产品生命周期管理
  20. Process Hacker 简单介绍

热门文章

  1. Altium Designer 20设置铜皮到板框的距离(设置内缩)
  2. HTML列表的简单使用以及在我们网页编程中的单位你了解多少??CSS中的字体样式你又了解多少,进来康康!!HTML、CSS(三)
  3. 现代软件工程讲义 7 用户界面和用户体验
  4. 第13章 多进程编程
  5. BI平台有哪些?这些你需要知道
  6. Spring IOC源码解析笔记
  7. oracle的时间各式,Oracle9i日期格式几点说明
  8. App Widget
  9. widget窗口小部件
  10. uni-app图片选择转base64问题,H5与APP端相关实现