首页 后端开发 php教程 php兑现装箱算法

php兑现装箱算法

Jun 13, 2016 am 10:40 AM
box count index items

php实现装箱算法

贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。
? ? 例如平时购物找钱时,为使找回的零钱的硬币数最少,不考虑找零钱的所有各种发表方案,而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使用贪婪法。这种方法在这里总是最优,是因为银行对其发行的硬币种类和硬币面值的巧妙安排。如只有面值分别为1、5和11单位的硬币,而希望找回总额为15单位的硬币。按贪婪算法,应找1个11单位面值的硬币和4个1单位面值的硬币,共找回5个硬币。但最优的解应是3个5单位面值的硬币。
【问题】 装箱问题
? ? 问题描述:装箱问题可简述如下:设有编号为0、1、…、n-1的n种物品,体积分别为v0、v1、…、vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超过V,即对于0≤i<n,有0<vi≤V。不同的装箱方案所需要的箱子数目可能不同。装箱问题要求使装尽这n种物品的箱子数要少。
? ? 若考察将n种物品的集合分划成n个或小于n个物品的所有子集,最优解就可以找到。但所有可能划分的总数太大。对适当大的n,找出所有可能的划分要花费的时间是无法承受的。为此,对装箱问题采用非常简单的近似算法,即贪婪法。该算法依次将物品放到它第一个能放进去的箱子中,该算法虽不能保证找到最优解,但还是能找到非常好的解。不失一般性,设n件物品的体积是按从大到小排好序的,即有v0≥v1≥…≥vn-1。如不满足上述要求,只要先对这n件物品按它们的体积从大到小排序,然后按排序结果对物品重新编号即可。装箱算法简单描述如下:
{ 输入箱子的容积;
输入物品种数n;
按体积从大到小顺序,输入各物品的体积;
预置已用箱子链为空;
预置已用箱子计数器box_count为0;
for (i=0;i{ 从已用的第一只箱子开始顺序寻找能放入物品i 的箱子j;
if (已用箱子都不能再放物品i)
{ 另用一个箱子,并将物品i放入该箱子;
box_count++;
}
else
将物品i放入箱子j;
}
}
上述算法能求出需要的箱子数box_count,并能求出各箱子所装物品。下面的例子说明该算法不一定能找到最优解,设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。按上述算法计算,需三只箱子,各箱子所装物品分别为:第一只箱子装物品1、3;第二只箱子装物品2、4、5;第三只箱子装物品6。而最优解为两只箱子,分别装物品1、4、5和2、3、6。
若每只箱子所装物品用链表来表示,链表首结点指针存于一个结构中,结构记录尚剩余的空间量和该箱子所装物品链表的首指针。另将全部箱子的信息也构成链表。以下是按以上算法编写的程序。
}

附php示例:

<?php//物品$items[0] = 60;$items[1] = 45;$items[2] = 35;$items[3] = 20;$items[4] = 20;$items[5] = 20;$box_volume_count = 100; //每个盒 子的最大容积$box_count = 0; //共用盒子总数$item_count = count( $items );$box = array();//盒 子数组for ( $itemindex = 0; $itemindex < $item_count; $itemindex++ ) {$_box_index = false;$_box_count = count( $box );for ( $box_index = 0; $box_index < $_box_count; $box_index++ ) {  if ( $box[$box_index]['volume'] + $items[$itemindex] <= $box_volume_count ) {  $_box_index = $box_index;  break;  }}if ( $_box_index === false ) {  $box[$_box_count]['volume'] = $items[$itemindex];  $box[$_box_count]['items'][] = $itemindex;  $box_count++;} else {  $box[$_box_index]['volume'] += $items[$itemindex];  $box[$_box_index]['items'][] = $itemindex;}}print_r( $box );?>
登录后复制

?

?

来自:http://home.51.com/chenjiuchuan/diary/item/10049598.html

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

index.html是什么文件? index.html是什么文件? Feb 19, 2024 pm 01:36 PM

index.html代表网页的首页文件,是网站的默认页面。当用户访问一个网站时,通常会首先加载index.html页面。HTML(HypertextMarkupLanguage)是一种用于创建网页的标记语言,index.html也是一种HTML文件。它包含网页的结构和内容,以及用于格式化和布局的标签和元素。下面是一个示例的index.html代码:&lt

counta和count的区别 counta和count的区别 Nov 20, 2023 am 10:01 AM

Count函数用于计算指定范围内数字的个数。它忽略文本、逻辑值和空值,但会将空单元格计算在内,Count函数只计算包含实际数字的单元格数量。而CountA函数用于计算指定范围内非空单元格的个数。它不仅计算包含实际数字的单元格,还计算包含文本、逻辑值和公式等非空单元格的数量。

提供云端强大的开发人员工作站:Microsoft Dev Box 提供云端强大的开发人员工作站:Microsoft Dev Box May 08, 2023 am 08:19 AM

在当今混合工作的时代,在云中拥有工作站以确保不间断的工作流程变得极为重要。虽然微软一直试图用Windows365解决这个问题,它今天宣布了一个名为MicrosoftDevBox的专用解决方案。简而言之,DevBox将提供托管在云上的强大的开发人员工作站。它还将与Azure部署环境集成,因此您可以使用现有的项目模板立即启动并运行。该解决方案背后的动机是减少IT管理员在资源入职和硬件采购、合规性和安全性方面的头痛。DevBox本质上是Windows365、Intun

python中items怎么用 python中items怎么用 Nov 28, 2023 am 11:29 AM

在Python中,items()方法通常用于字典(dictionary)对象,用于返回字典的所有键值对(key-value pairs)。这是一个字典的成员方法,因此你不能直接对任何对象使用它,除非那个对象是一个字典。

mysql index是什么 mysql index是什么 Oct 08, 2023 am 11:47 AM

MySQL中的index是索引的意思,是一种数据结构,用于加快数据库表的查询速度,索引可以类比于书籍的目录,存储了表中特定列的值和对应的行位置,使得数据库能够更快地定位和访问数据。索引的作用是提高查询效率,在没有索引的情况下,数据库需要逐行扫描整个表来找到匹配的数据,这种方式在大型表中会非常耗时,而有了索引后,数据库可以根据索引的顺序快速定位到所需的数据行,大大提高了查询速度。

MySQL关于Count函数的用法区别总结 MySQL关于Count函数的用法区别总结 Nov 29, 2022 pm 04:47 PM

本文给大家介绍MySQL关于Count函数的用法区别,统计数据的需求在我们日常开发中是非常容易遇到了,MySQL也支持多种的计算的函数,接下来我们来看一看他们之间有什么区别,以及他们是否存在一些坑。

php中count函数的用法是什么 php中count函数的用法是什么 Sep 09, 2021 pm 05:08 PM

php中count函数的用法是:【count(array,mode);】,其中参数array规定要计数的数组,参数mode规定函数的模式。

PHP源码运行问题:index报错解决方法 PHP源码运行问题:index报错解决方法 Mar 09, 2024 pm 09:24 PM

PHP源码运行问题:index报错解决方法,需要具体代码示例PHP是一种广泛使用的服务器端脚本语言,经常被用于开发动态网站和Web应用程序。然而,有时候在运行PHP源码时会遇到各种问题,其中“index报错”是比较常见的一种情况。本文将介绍一些常见的index报错原因以及解决方法,并提供具体的代码示例,帮助读者更好地处理这类问题。问题描述:在运行PHP程序时

See all articles