Решение задачи о рюкзаках (модифицированной)

программирование математика алгоритмы

Необходимо решить вариант классической задачи о рюкзаках. Есть n вещей разного веса. Есть неограниченное количество рюкзаков, каждый из которых может нести вес m. Нужно расположить вещи по рюкзакам так, чтобы в них оставалось минимум свободного места.
Перебор не предлагать. :)

Задачи типа классического сокращения перебора задачи о рюкзаке, когда нужно найти все комбинации предметов, вес которых _равен_ m - не подходят. http://www.codenet.ru/progr/other/perebor.php
Ответы:
Сделай дерево. Можно бинарное. Положи туда вещи. Перебери рюкзаки :)
Похоже решение через рекурсию.
1) Для того чтобы решить задачу в общем случае с неограниченным кол-вом рюкзаков, надо сначала решить задачу для одного рюкзака.
Следовательно задача сводится к тому, что нужно в 1 рюкзак запихать как можно больше вещей. После чего остаток вещей запихнуть в другой рюкзак. И так далее, пока еще есть вещи.
2) Для того чтобы решить задачу для 1 рюкзака, надо изменить метод, который предлогал какой-то там Д.... Не помню как его звали. Можете поискать в литературе про "Дискретное программирование". Но сють того метода в том, что мы находим отношение полезность/вес вещи, и пихаем их в рюкзак по убыванию данного показателя. Вам же надо их пихать по убыванию веса. Дальше алгоритм будет идентичен.
З.Ы. Т.е. если вы запихнули в рюкзак K вещей и следующая вещь уже делает перегруз, то вы разбиваете множество решений на 2 подмножества. С K+1 вещью и без. Далее аналогично.
З.З.Ы. Расписывать алгоритм не буду, потому как сессию закрыл и его уже не помню полностьб. Но если немного прочитать соответсвующую литературу и воспользоваться моими корректировками, то результат будет достигнут.
множество вещей разбиваем на t комплектов
комплект имеет суммарный вес Ki, меньший m
решение задачи заключается в том, чтобы найти такое разбиение вещей на комплекты, чтобы сумма всего пустого места E(m-Ki) была минимальной.
Велоответчик: Перебором, к сожалению, эта задача перестаёт решаться при относительно небольшом количестве вещей. Скажем 50. Посмотрите сколько итераций даёт факториал от 50. Перебор с сокращениями - это да, но алгоритма я не нашёл.
можно попробовать динамическое программирование, если размер рюкзаков в пределах 10^6.


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.