关于近似装箱问题的思考。

有这样一个需求, 需要对一组元素进行打包(装箱),箱子的容积一定,但是至少可以装入一件物品,即使物品的体积大于箱子,求用最少的箱子装载。

该问题类似装箱。在对物体发货时候,可以达到最少的包裹数,挺有实际意义,借此研究一下装箱问题。下面代码是对与该问题的实现。由于是记录作用,文笔较为粗糙,后续修正加以详细说明。

该实现借鉴了装箱算法,关于装箱算法可以参考网络文章。如下:

http://blog.csdn.net/zhangnaigan/article/details/38352745

http://blog.csdn.net/x_i_y_u_e/article/details/46765093

具体实现代码如下:

$items = array(
    0.1,0.3,0.8,0.4,0.5,0.2,1
);
//sort($items,SORT_DESC);
defined(‘BOXSIZE‘) || define(‘BOXSIZE‘,1);
function bestEncasement($items){
    sort($items);
    $cnt = count($items,SORT_DESC);//更加有利于装箱
    $box = array();
    $dealArr = array();
    for($j = 0;$j<$cnt;$j++){
        $lastSize = intval(BOXSIZE);
        for($i = $cnt -1;$i>0;$i--){
            if(in_array($i,$dealArr)){
                continue;//如果该元素已经处理过则跳过
            }
            //探测盒子是否为空 如果为空将元素加入
            if(empty($box[$j])){
                $box[$j][] = $items[$i];
                $dealArr[] = $i;
                $lastSize -=  $items[$i];
                if($items[$i]>=BOXSIZE){
                    break;//空间已经存满直接跳出处理下一个盒子
                }
            }else{
                $tmpSize =$lastSize - $items[$i];//探测盒子是否够存放该元素
                if($tmpSize == 0){
                    $box[$j][] = $items[$i];
                    $dealArr[] = $i;
                    break;//存入空间剩余0 则跳出循环  处理下一个盒子
                }
                if($tmpSize>0){//足够存入盒子  探测下一个元素
                    $box[$j][] = $items[$i];
                    $lastSize -=  $items[$i];
                    $dealArr[] = $i;
                    continue;
                }else{
                    //不足 处理下一个盒子
                    break;
                }
            }
        }
    }
    return $box;
}
print_r(bestEncasement($items));
时间: 2024-10-23 04:06:10

关于近似装箱问题的思考。的相关文章

数据结构之贪心算法(背包问题的思考)-(十)

贪心策略.关于贪心算法的思考,思考过程都放在代码中了. package com.lip.datastructure; /** *贪心算法:装箱问题的思考 * @author Lip *装箱问题可以是时间调问题的延伸,当一个箱子没有容积限制,那么就是时间调度问题 *在时间调度问题中:存在两个可以讨论的问题.1.平均最短时间 2.总的最短时间 *这两个问题都和装箱问题中问题如此类似. */ /* * 上面是我理解的装箱问题,本来是想说背包问题的 * 背包问题的描述:有N件物品和一个容量为V的背包.第

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

数据结构与算法分析(六)——算法设计技巧

从算法的实现向算法的设计转变,提供解决问题的思路 1.贪心算法 一种局部最优算法设计思路,思想是保证每一步选择在当前达到最优.一个很常见的贪心算法案例是零钱找取问题. 调度问题:书上的调度问题比较简单,其目标是所有作业的平均持续时间(调度+运行)最短,无论是但处理器还是多处理器,最优解的方案总是按作业的长短排序进行调度.<计算机算法设计与分析>上的作业调度的目标是最后完成时间最小,这要稍微复杂一些. 霍夫曼编码:最优编码必定保持满树的性质,基本问题在于找到总之最小的满二叉树.最简单的霍夫曼编码

操作系统思考 第七章 缓存

第七章 缓存 作者:Allen B. Downey 原文:Chapter 7 Caching 译者:飞龙 协议:CC BY-NC-SA 4.0 7.1 程序如何运行 为了理解缓存,你需要理解计算机如何运行程序.你应该学习计算机体系结构来深入理解这个话题.这一章中我的目标是给出一个程序执行的简单模型. 当程序启动时,代码(或者程序文本)通常位于硬盘上.操作系统创建新的进程来运行程序,之后"加载器"将代码从存储器复制到主存中,并且通过调用main来启动程序. 在程序运行之中,它的大部分数据

关于大型网站技术演进的思考--存储的瓶颈(转)

(一)第一部分 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出全部听到的知识,今天我换了个思路是回味这次培训,这个思路就是通过本人目前的经验和技术水平来思考下大型网站技术演进的过程. 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那

操作系统思考

第七章 缓存 7.1 程序如何运行 为了理解缓存,你需要理解计算机如何运行程序.你应该学习计算机体系结构来深入理解这个话题.这一章中我的目标是给出一个程序执行的简单模型. 当程序启动时,代码(或者程序文本)通常位于硬盘上.操作系统创建新的进程来运行程序,之后"加载器"将代码从存储器复制到主存中,并且通过调用main来启动程序. 在程序运行之中,它的大部分数据都储存在主存中,但是一些数据在寄存器中,它们是CPU上的小型储存单元.这些寄存器包括: 程序计数器(PC),它含有程序下一条指令(

【算法】字符串近似搜索(转)

来源:.Net.NewLife.    需求:假设在某系统存储了许多地址,例如:“北京市海淀区中关村大街1号海龙大厦”.用户输入“北京 海龙大厦”即可查询到这条结果.另外还需要有容错设计,例如输入“广西 京岛风景区”能够搜索到"广西壮族自治区京岛风景名胜区".最终的需求是:可以根据用户输入,匹配若干条近似结果共用户选择.    目的:避免用户输入类似地址导致数据出现重复项.例如,已经存在“北京市中关村”,就不应该再允许存在“北京中关村”. 举例: 此类技术在搜索引擎中早已广泛使用,例如

[企业管理]人性化管理的基础讨论与思考之呻吟

我 2015/5/9 11:06:15有个事情,一直没好问,也怕是你伤心的地方.你这次过来给我提到说,你喜欢的人让你当老师,你才去选择了教师作为职业.那,你们分手,是因为你--么?如果你不想回答,可以漠视. 一个朋友  11:06:57不是 我  11:07:49那为什么会分手呢,我觉得,你人挺好的,长得也不差,是什么原因呢? 一个朋友  11:08:54错误的时间遇见了爱的人   现实摧毁爱情 我  11:09:28错误的时间,我觉得,更主要是在于人的选择和坚持.现实有很多,未必都能摧毁,除非

周志华:关于机器学习的一点思考

https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw 演讲:周志华 整理:肖琴.闻菲 [新智元导读]机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AI WORLD 2018大会上分享他关于机器学习的一点思考:我们需要设计新的.神经网络以外的深度模型:让智能体在弱监督条件下也能够学习,以及考虑开放动态任务环境下的学习. 播放 震撼!AI WORLD 2018世界人工智能峰会开场视频 南京大学计算机系主任.人工智能学院院