Мне нужна формула, которая поможет мне сгруппировать несколько посылок в одну.
У меня есть объект Parcel, подобный этому:
<?php
class Parcel {
function __construct($length,$width,$height,$weight) {
$this->length=$length;
$this->width=$width;
$this->height=$height;
$this->weight=$weight;
}
private $length;
private $width;
private $height;
private $weight;
public function getParcelDetails()
{
echo "length = ".$this->length."<br>";
echo "width = ".$this->width."<br>";
echo "height = ".$this->height."<br>";
echo "weight = ".$this->weight ."<br>";
}
public static function mergeParcels($parcels){
$new_parcel_length=0;
$new_parcel_width=0;
$new_parcel_height=0;
$new_parcel_weight=0;
foreach ($parcels as $key => $parcel) {
# What is the formula that can create a new parcel which is enable to contain the parcels $parcels ?
# The weight will be just additionned
$new_parcel_weight+=$parcel->$weight;
}
$new_parcel= new static($new_parcel_length,$new_parcel_width,$new_parcel_height,$new_parcel_weight);
return $new_parcel;
}
}
Цель состоит в том, чтобы объединить посылки в одну, поэтому в основном скрипте у меня будет что-то вроде этого:
$parcel1=new Parcel(10,10,10,1);
$parcel2=new Parcel(5,5,5,1);
//$parcel1->getParcelDetails();
//$parcel2->getParcelDetails();
$new_parcel=Parcel::mergeParcels([$parcel1,$parcel2]);
$new_parcel->getParcelDetails();
Эта картинка может продемонстрировать проблему:

Обратите внимание, что проблема заключается в том, что у меня есть несколько участков, размеры которых не равны.
Если размеры равны, я могу просто добавить их друг к другу, но на самом деле у меня нет решения, когда размеры не совпадают.
PHP или Java? Вы уверены? Ваш код - это просто PHP.
@ Script47 формула будет такой же, независимо от языка.
@AITMANSOURMohamed, если вам нужна только формула, не отмечайте какой-либо язык программирования, если вам нужна формула в php, просто отмечайте php
Смотрите картинку. Что должно произойти, если у меня есть только посылки 1, 2 и 3, а я попытался их объединить? должен ли он стать некоробчатым?
@AITMANSOURMohamed, но код будет значительно отличаться, если вам просто нужна формула, возможно, лучше по адресу: math.stackexchange.com - проверьте их тур, прежде чем спрашивать.
@RizkiHadiaturrasyid нет, он может иметь форму коробки, даже если есть свободное место,






Ваша проблема программирования называется проблема с упаковкой рюкзака, подмножество задач комбинаторной оптимизации.
Небольшие проблемы можно решить с помощью динамического программирования, а более крупные — с помощью эвристики.
Подробнее об этом можно прочитать здесь и здесь.
Обратите внимание, что крупномасштабные комбинаторные решатели — это целая индустрия, требующая многолетних исследований и разработок.
Почему вы отметили java?