[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача об упаковке в контейнеры
Reflex
Возможно кому то будет полезна функция оптимальной упаковки в контейнеры.
Другое название алгоритма: Алгоритм оптимального распределения камней по ящикам.

Я переписал найденный в книге алгоритм с сохранением названий переменных.

function SIM($U, $size)
{
$J = 0;
$Q = $size;
$U_J = array(array());

rsort($U);

while (count($U))
{
$u_k = array_shift($U);
while ($u_k < $Q / 2)
$Q /= 2;

$u_i = 0;
foreach ($U as $key => $value) {
if ($u_k + $value <= $Q) {
$u_i = $value;
unset($U[$key]);
break;
}
}


if ($u_k + $u_i + array_sum($U_J[$J]) > $size)
$J++;

$U_J[$J][] = $u_k;
if ($u_i)
$U_J[$J][] = $u_i;
}

return $U_J;
}


Функция принимает массив размеров сортируемых предметов первым параметром и размер контейнера вторым.

Возвращает многомерный массив контейнеров, содержащих в себе размеры предметов.

Проверок входных данных нет.

Пример вызова:
$arr = SIM(array(0.1, 0.3, 0.5, 0.2, 1, 0.9), 1);



У меня эта функция нашла применение при записи огромного количества фильмов на DVD болванки.



Спустя 1 год, 11 месяцев, 12 дней, 12 часов, 26 минут, 37 секунд (29.08.2012 - 13:28) Fred написал(а):
Никак не пойму, как переделать под контейнеры разной вместимости(
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.