백엔드 개발 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 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

카운트와 카운트의 차이점 카운트와 카운트의 차이점 Nov 20, 2023 am 10:01 AM

Count 함수는 지정된 범위 내의 숫자 수를 계산하는 데 사용됩니다. 텍스트, 논리값 및 Null 값은 무시하지만 빈 셀의 개수는 계산됩니다. Count 함수는 실제 숫자가 포함된 셀의 개수만 계산합니다. CountA 함수는 지정된 범위에서 비어 있지 않은 셀의 수를 계산하는 데 사용됩니다. 실제 숫자가 포함된 셀의 개수뿐만 아니라 텍스트, 논리값 및 수식이 포함된 비어 있지 않은 셀의 개수도 계산됩니다.

클라우드에서 강력한 개발자 워크스테이션 제공: Microsoft Dev Box 클라우드에서 강력한 개발자 워크스테이션 제공: Microsoft Dev Box May 08, 2023 am 08:19 AM

오늘날의 하이브리드 작업 시대에는 중단 없는 워크플로를 보장하기 위해 클라우드에 워크스테이션을 보유하는 것이 매우 중요해졌습니다. Microsoft는 Windows 365에서 이 문제를 해결하려고 노력해 왔지만 오늘 Microsoft DevBox라는 전용 솔루션을 발표했습니다. 간단히 말해서 DevBox는 클라우드에서 호스팅되는 강력한 개발자 워크스테이션을 제공할 것입니다. 또한 Azure 배포 환경과 통합되므로 기존 프로젝트 템플릿을 사용하여 즉시 시작하고 실행할 수 있습니다. 솔루션 이면의 동기는 리소스 온보딩과 하드웨어 조달, 규정 준수 및 보안에 대한 IT 관리자의 골치 아픈 일을 줄이는 것입니다. DevBox는 기본적으로 Windows365, Intun입니다.

Python에서 항목을 사용하는 방법 Python에서 항목을 사용하는 방법 Nov 28, 2023 am 11:29 AM

Python에서 items() 메소드는 일반적으로 사전 객체에 사용되어 사전의 모든 키-값 쌍을 반환합니다. 이는 사전의 멤버 메소드이므로 해당 객체가 사전이 아닌 이상 어떤 객체에도 직접 사용할 수 없습니다.

mysql 인덱스가 뭐야? mysql 인덱스가 뭐야? Oct 08, 2023 am 11:47 AM

MySQL에서 인덱스는 인덱스를 의미하며 데이터베이스 테이블의 쿼리 속도를 높이기 위해 사용되는 데이터 구조입니다. 인덱스는 테이블의 특정 열 값을 저장합니다. 해당 행 위치를 통해 데이터베이스를 보다 효율적으로 찾고 액세스할 수 있습니다. 인덱스의 기능은 쿼리 효율성을 높이는 것입니다. 인덱스가 없으면 데이터베이스는 일치하는 데이터를 찾기 위해 전체 테이블을 행별로 스캔해야 합니다. 이 방법은 인덱스가 있는 경우 매우 시간이 많이 걸립니다. 필요한 데이터 행을 순서대로 빠르게 찾을 수 있으므로 쿼리 속도가 크게 향상됩니다.

MySQL Count 함수의 사용법 차이 요약 MySQL Count 함수의 사용법 차이 요약 Nov 29, 2022 pm 04:47 PM

이 기사에서는 일상적인 개발에서 통계 데이터의 필요성을 매우 쉽게 접할 수 있는 사용법의 차이점을 소개합니다. 다음으로 이들 간의 차이점을 살펴보겠습니다. 그리고 함정이 있는지 여부.

PHP에서 카운트 함수의 사용법은 무엇입니까 PHP에서 카운트 함수의 사용법은 무엇입니까 Sep 09, 2021 pm 05:08 PM

PHP에서 count 함수의 사용법은 다음과 같습니다: [count(array,mode);], 여기서 매개변수 array는 계산할 배열을 지정하고, 매개변수 mode는 함수의 모드를 지정합니다.

PHP 소스 코드 실행 문제: 인덱스 오류 해결 방법 PHP 소스 코드 실행 문제: 인덱스 오류 해결 방법 Mar 09, 2024 pm 09:24 PM

PHP 소스 코드 실행 문제: 인덱스 오류 해결에는 특정 코드 예제가 필요합니다. PHP는 동적 웹 사이트 및 웹 애플리케이션을 개발하는 데 자주 사용되는 널리 사용되는 서버 측 스크립팅 언어입니다. 그러나 때로는 PHP 소스 코드를 실행할 때 다양한 문제에 직면할 수 있으며, 그 중 "인덱스 오류"가 일반적인 상황입니다. 이 문서에서는 몇 가지 일반적인 인덱스 오류 원인과 해결 방법을 소개하고 독자가 이러한 문제를 더 잘 처리하는 데 도움이 되는 특정 코드 예제를 제공합니다. 문제 설명: PHP 프로그램을 실행할 때

See all articles