Постоянная проблема с рюкзаком
В теоретической информатике ( задача о непрерывном рюкзаке также известная как задача о дробном рюкзаке ) — это алгоритмическая задача комбинаторной оптимизации , цель которой состоит в том, чтобы заполнить контейнер («рюкзак») дробными количествами различных материалов, выбранных для максимизации стоимость выбранных материалов. [1] [2] Это напоминает классическую задачу о рюкзаке , в которой предметы, помещаемые в контейнер, неделимы; однако непрерывная задача о рюкзаке может быть решена за полиномиальное время , тогда как классическая задача о рюкзаке является NP-трудной . [1] Это классический пример того, как, казалось бы, небольшое изменение в формулировке задачи может существенно повлиять на ее вычислительную сложность .
Определение проблемы
[ редактировать ]Пример либо непрерывной, либо классической задачи о рюкзаке может быть определен числовой вместимостью W рюкзака вместе с набором материалов, с каждым из которых связаны два числа: вес w i материала, доступного для использования. выбранного и общую стоимость v i этого материала. Цель состоит в том, чтобы выбрать количество x i ≤ w i каждого материала с учетом ограничения производительности. и максимизировать общую выгоду В классической задаче о рюкзаке каждая из величин x i должна быть либо нулем, либо w i ; Задача о непрерывном рюкзаке отличается тем, что позволяет изменяться непрерывно от нуля до wi xi . [1]
В некоторых формулировках этой задачи переменные x i масштабируются в диапазоне от 0 до 1. В этом случае ограничение пропускной способности принимает вид и цель состоит в том, чтобы максимизировать общую выгоду
Техника решения
[ редактировать ]Задача о непрерывном рюкзаке может быть решена с помощью жадного алгоритма , впервые опубликованного в 1957 году Джорджем Данцигом . [2] [3] который рассматривает материалы в отсортированном порядке по их стоимости на единицу веса. Для каждого материала количество x i выбирается как можно большим:
- Если сумма сделанного выбора равна пропускной способности W , то алгоритм устанавливает x i = 0.
- Если разница d между суммой сделанных выборов и W меньше, чем w i , то алгоритм устанавливает x i = d .
- В оставшемся случае алгоритм выбирает x i = w i .
Из-за необходимости сортировки материалов этот алгоритм требует времени O ( n log n ) на входных данных с n материалами. [1] [2] Однако, адаптировав алгоритм нахождения взвешенных медиан , можно решить задачу за время O ( n ). [2]
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Гудрич, Майкл Т .; Тамассиа, Роберто (2002), «5.1.1 Проблема дробного рюкзака», Разработка алгоритмов: основы, анализ и примеры из Интернета , John Wiley & Sons, стр. 259–260 .
- ^ Jump up to: а б с д Корте, Бернхард ; Виген, Йенс (2012), «17.1 Дробный рюкзак и взвешенная медиана», Комбинаторная оптимизация: теория и алгоритмы , Алгоритмы и комбинаторика, том. 21, Спрингер, стр. 459–461, ISBN. 9783642244889 .
- ^ Данциг, Джордж Б. (1957), «Экстремальные задачи с дискретными переменными», Operations Research , 5 : 266–277, doi : 10.1287/opre.5.2.266 , MR 0089098 .