Задача о рюкзаке
Задача о рюкзаке — это следующая задача комбинаторной оптимизации :
- Учитывая набор элементов, каждый из которых имеет вес и значение, определите, какие элементы включить в коллекцию, чтобы общий вес был меньше или равен заданному пределу, а общая стоимость была как можно большей.
Он получил свое название от проблемы, с которой сталкивается тот, кто ограничен рюкзаком фиксированного размера и должен наполнить его наиболее ценными предметами. Проблема часто возникает при распределении ресурсов , когда лицам, принимающим решения, приходится выбирать из набора неделимых проектов или задач с фиксированным бюджетом или временными ограничениями соответственно.
Задача о рюкзаке изучается уже более века, первые работы датируются еще 1897 годом. [1]
Приложения
[ редактировать ]Проблемы с рюкзаком возникают в реальных процессах принятия решений в самых разных областях, таких как поиск наименее расточительного способа добычи сырья, [2] подбор инвестиций и портфелей , [3] выбор активов для секьюритизации, обеспеченной активами , [4] и генерация ключей для алгоритма Меркла-Хеллмана. [5] и другие ранцевые криптосистемы .
Одним из первых применений ранцевых алгоритмов было создание и оценка тестов, в которых испытуемые могли выбирать, на какие вопросы им отвечать. В случае небольших примеров предоставить тестируемым такой выбор довольно просто. Например, если экзамен содержит 12 вопросов, каждый из которых оценивается в 10 баллов, тестируемому достаточно ответить только на 10 вопросов, чтобы получить максимально возможную оценку в 100 баллов. Однако на тестах с неоднородным распределением значений баллов предоставить выбор сложнее. Фейерман и Вайс предложили систему, в которой студентам предлагается гетерогенный тест, насчитывающий в общей сложности 125 возможных баллов. Студентам предлагается ответить на все вопросы в меру своих способностей. Из возможных подмножеств задач, общая сумма баллов которых равна 100, алгоритм ранца определит, какое подмножество дает каждому учащемуся максимально возможный балл. [6]
Исследование, проведенное в 1999 году в хранилище алгоритмов Университета Стоуни-Брук, показало, что из 75 алгоритмических задач, связанных с областью комбинаторных алгоритмов и разработки алгоритмов, задача о рюкзаке была 19-й по популярности и третьей по необходимости после суффиксных деревьев и задачи упаковки контейнеров. . [7]
Определение
[ редактировать ]Наиболее распространенной решаемой задачей является задача о рюкзаке 0-1 , которая ограничивает число копий каждого вида предметов до нуля или одной. Учитывая набор элементы, пронумерованные от 1 до , каждый с весом и значение , а также максимальная грузоподъемность ,
- максимизировать
- при условии и .
Здесь представляет количество экземпляров элемента положить в рюкзак. Неформально задача состоит в том, чтобы максимизировать сумму ценностей предметов в рюкзаке так, чтобы сумма весов была меньше или равна вместимости рюкзака.
Задача об ограниченном рюкзаке ( BKP ) снимает ограничение на наличие только одного предмета каждого предмета, но ограничивает количество копий каждого вида предметов до максимального неотрицательного целого значения :
- максимизировать
- при условии и
Задача о неограниченном рюкзаке ( UKP ) не накладывает верхней границы на количество экземпляров каждого вида предметов и может быть сформулирована, как указано выше, за исключением того, что единственное ограничение на заключается в том, что это неотрицательное целое число.
- максимизировать
- при условии и
Один из примеров задачи о неограниченном рюкзаке дан с использованием рисунка, показанного в начале этой статьи, и текста «если доступно любое количество каждой книги» в подписи к этому рисунку.
Вычислительная сложность
[ редактировать ]Задача о рюкзаке интересна с точки зрения информатики по многим причинам:
- Форма задачи решения задачи о рюкзаке ( Можно ли достичь значения не менее V , не превышая веса W ? ) является NP-полной , поэтому не существует известного алгоритма, который был бы одновременно правильным и быстрым (полиномиальное время) во всех случаях. .
- Не существует известного полиномиального алгоритма, который мог бы определить, является ли решение оптимальным (что означало бы, что не существует решения с большим V ). Эта задача является ко-NP-полной .
- Существует псевдополиномиальный алгоритм времени, использующий динамическое программирование .
- Существует полностью полиномиальная схема аппроксимации , которая использует в качестве подпрограммы алгоритм псевдополиномиального времени, описанный ниже.
- Тем не менее, многие случаи, возникающие на практике, и «случайные случаи» из некоторых дистрибутивов могут быть решены точно.
Существует связь между проблемами «решения» и «оптимизации» в том, что если существует полиномиальный алгоритм, который решает проблему «решения», то можно найти максимальное значение для задачи оптимизации за полиномиальное время, применяя этот алгоритм итеративно, в то время как увеличивая значение k. С другой стороны, если алгоритм находит оптимальное значение задачи оптимизации за полиномиальное время, то проблема принятия решения может быть решена за полиномиальное время путем сравнения значения решения, выдаваемого этим алгоритмом, со значением k. Таким образом, оба варианта задачи имеют одинаковую сложность.
Одной из тем исследовательской литературы является определение того, как выглядят «сложные» примеры задачи о рюкзаке. [8] [9] [10] или посмотреть по-другому, чтобы определить, какие свойства экземпляров на практике могут сделать их более податливыми, чем предполагает их NP-полное поведение в худшем случае. [11] [12] Целью поиска этих «жестких» экземпляров является их использование в системах криптографии с открытым ключом , таких как ранцевая криптосистема Меркла-Хеллмана . В более общем смысле, лучшее понимание структуры пространства примеров задачи оптимизации помогает продвинуться вперед в изучении конкретной проблемы и может улучшить выбор алгоритма.
Кроме того, следует отметить тот факт, что сложность задачи о рюкзаке зависит от формы входных данных. Если веса и прибыль заданы как целые числа, она является слабо NP-полной , а она является сильно NP-полной . если веса и прибыль заданы как рациональные числа, то [13] Однако в случае рациональных весов и прибылей он по-прежнему допускает полностью полиномиальную схему аппроксимации .
Модели удельной стоимости
[ редактировать ]NP-трудность задачи о рюкзаке относится к вычислительным моделям, в которых размер целых чисел имеет значение (например, машина Тьюринга ). Напротив, в деревьях решений каждое решение рассматривается как один шаг. Добкин и Липтон [14] показать нижняя граница линейных деревьев решений для задачи о рюкзаке, то есть деревьев, в которых узлы решений проверяют знак аффинных функций . [15] Стил и Яо обобщили это на алгебраические деревья решений. [16] Если элементами задачи являются числа действительные или рациональные , нижняя граница дерева решений распространяется на реальную модель машины с произвольным доступом с набором команд, который включает в себя сложение, вычитание и умножение действительных чисел, а также сравнение и деление или остаток («этаж»). [17] Эта модель охватывает больше алгоритмов, чем модель алгебраического дерева решений, поскольку она включает алгоритмы, использующие индексацию в таблицах. Однако в этой модели учитываются все шаги программы, а не только решения. Верхняя граница модели дерева решений была дана Мейером ауф дер Хайде. [18] который показал, что для каждого n существует O ( n 4 ) - глубокое линейное дерево решений, которое решает задачу о сумме подмножеств с n элементами. Обратите внимание, что это не подразумевает какой-либо верхней границы для алгоритма, который должен решать задачу для любого заданного n .
Решение
[ редактировать ]Доступно несколько алгоритмов для решения задач о рюкзаке, основанных на подходе динамического программирования: [19] ветвей и границ подход [20] или гибридизация обоих подходов. [11] [21] [22] [23]
Алгоритм предварительного динамического программирования
[ редактировать ]Задача о неограниченном рюкзаке ( UKP ) не накладывает ограничений на количество копий каждого вида предметов. Кроме того, здесь мы предполагаем, что
- при условии и
Обратите внимание, что имеет следующие свойства:
1. (сумма нулевых элементов, т. е. суммирование пустого множества).
2. , , где это ценность -й вид предмета.
Второе свойство требует более подробного пояснения. Как нам получить вес в процессе выполнения этого метода? ? Есть только способы и предыдущие веса где всего виды разных предметов (говоря «разные», мы имеем в виду, что вес и стоимость не совсем одинаковы). Если мы знаем каждое значение этих элементы и соответствующее максимальное значение ранее, мы просто сравниваем их друг с другом и в конечном итоге получаем максимальное значение, и все готово.
Здесь максимум пустого множества принимается равным нулю. Таблицы результатов до конца дает решение. Поскольку расчет каждого предполагает изучение максимум предметов, и их не более значения для расчета время работы решения динамического программирования равно . Разделение по их наибольшему общему делителю — это способ улучшить время работы.
Даже если P≠NP , сложность не противоречит тому, что задача о рюкзаке NP-полна , поскольку , в отличие от , не является полиномиальным по длине входных данных задачи. Длина входные данные задачи пропорциональны количеству битов в , , а не сам. Однако, поскольку это время выполнения является псевдополиномиальным , это делает задачу о рюкзаке (вариант решения) слабо NP-полной задачей .
0-1 проблема с рюкзаком
[ редактировать ]Аналогичное решение динамического программирования для задачи о рюкзаке 0-1 также работает за псевдополиномиальное время. Предполагать являются строго положительными целыми числами. Определять быть максимальным значением, которое может быть достигнуто с весом, меньшим или равным используя предметы до (первый предметы).
Мы можем определить рекурсивно следующим образом: (Определение A)
- если (новый предмет превышает текущий лимит веса)
- если .
Тогда решение можно найти, вычислив . Чтобы сделать это эффективно, мы можем использовать таблицу для хранения предыдущих вычислений.
Ниже приведен псевдокод динамической программы:
// Input:
// Values (stored in array v)
// Weights (stored in array w)
// Number of distinct items (n)
// Knapsack capacity (W)
// NOTE: The array "v" and array "w" are assumed to store all relevant values starting at index 1.
array m[0..n, 0..W];
for j from 0 to W do:
m[0, j] := 0
for i from 1 to n do:
m[i, 0] := 0
for i from 1 to n do:
for j from 1 to W do:
if w[i] > j then:
m[i, j] := m[i-1, j]
else:
m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i])
Таким образом, это решение будет работать в время и космос. (Если нам нужно только значение m[n,W], мы можем изменить код так, чтобы объем требуемой памяти составлял O(W), в котором хранятся две последние строки массива «m».)
Однако, если мы сделаем шаг или два дальше, мы должны знать, что метод будет работать в промежутке между и . Из определения А мы знаем, что нет необходимости вычислять все веса, когда количество элементов и сами элементы, которые мы выбрали, фиксированы. Другими словами, приведенная выше программа вычисляет больше, чем необходимо, поскольку вес часто меняется от 0 до W. С этой точки зрения мы можем запрограммировать этот метод так, чтобы он выполнялся рекурсивно.
// Input:
// Values (stored in array v)
// Weights (stored in array w)
// Number of distinct items (n)
// Knapsack capacity (W)
// NOTE: The array "v" and array "w" are assumed to store all relevant values starting at index 1.
Define value[n, W]
Initialize all value[i, j] = -1
Define m:=(i,j) // Define function m so that it represents the maximum value we can get under the condition: use first i items, total weight limit is j
{
if i == 0 or j <= 0 then:
value[i, j] = 0
return
if (value[i-1, j] == -1) then: // m[i-1, j] has not been calculated, we have to call function m
m(i-1, j)
if w[i] > j then: // item cannot fit in the bag
value[i, j] = value[i-1, j]
else:
if (value[i-1, j-w[i]] == -1) then: // m[i-1,j-w[i]] has not been calculated, we have to call function m
m(i-1, j-w[i])
value[i, j] = max(value[i-1,j], value[i-1, j-w[i]] + v[i])
}
Run m(n, W)
Например, существует 10 разных предметов, а предел веса — 67. Итак, Если вы используете вышеуказанный метод для вычисления , вы получите это, исключая вызовы, которые производят :
Кроме того, мы можем сломать рекурсию и преобразовать ее в дерево. Затем мы можем отрезать несколько листьев и использовать параллельные вычисления, чтобы ускорить выполнение этого метода.
Чтобы найти фактическое подмножество элементов, а не только их общее значение, мы можем запустить это после запуска функции выше:
/**
* Returns the indices of the items of the optimal knapsack.
* i: We can include items 1 through i in the knapsack
* j: maximum weight of the knapsack
*/
function knapsack(i: int, j: int): Set<int> {
if i == 0 then:
return {}
if m[i, j] > m[i-1, j] then:
return {i} ∪ knapsack(i-1, j-w[i])
else:
return knapsack(i-1, j)
}
knapsack(n, W)
Встреча посередине
[ редактировать ]Другой алгоритм для ранца 0-1, открытый в 1974 году. [24] и иногда называемый «встречей посередине» из-за параллелей с алгоритмом с аналогичным названием в криптографии , является экспоненциальным по количеству различных элементов, но может быть предпочтительнее алгоритма DP, когда велико по сравнению с n . В частности, если являются неотрицательными, но не целыми числами, мы все равно можем использовать алгоритм динамического программирования путем масштабирования и округления (т. е. с использованием арифметики с фиксированной запятой ), но если задача требует дробные цифры точности, чтобы прийти к правильному ответу, нужно будет масштабировать на , и алгоритм DP потребует пространство и время.
algorithm Meet-in-the-middle is input: A set of items with weights and values. output: The greatest combined value of a subset. partition the set {1...n} into two sets A and B of approximately equal size compute the weights and values of all subsets of each set for each subset of A do find the subset of B of greatest value such that the combined weight is less than W keep track of the greatest combined value seen so far
Алгоритм принимает пространство, а эффективная реализация шага 3 (например, сортировка подмножеств B по весу, отбрасывание подмножеств B, которые весят больше, чем другие подмножества B большего или равного значения, и использование двоичного поиска для поиска наилучшего соответствия) приводят к время выполнения . Как и в случае с атакой «встреча посередине» в криптографии, это улучшает время выполнения наивного подхода грубой силы (исследуя все подмножества ), за счет использования экспоненциального, а не постоянного пространства (см. также baby-step-giant-step ). Современное усовершенствование алгоритма «встреча посередине», основанное на идеях алгоритма Шреппеля и Шамира для суммы подмножеств, обеспечивает в качестве следствия рандомизированный алгоритм для «Рюкзака», который сохраняет (вплоть до полиномиальных коэффициентов) и снижает требования к пространству для (видеть [25] Следствие 1.4). Напротив, самый известный детерминированный алгоритм работает в время с немного худшей пространственной сложностью . [26]
Алгоритмы аппроксимации
[ редактировать ]Что касается большинства NP-полных задач, этого может быть достаточно, чтобы найти работоспособные решения, даже если они не являются оптимальными. Предпочтительно, однако, чтобы аппроксимация обеспечивала разницу между значением найденного решения и значением оптимального решения.
Как и в случае со многими полезными, но сложными в вычислительном отношении алгоритмами, были проведены серьезные исследования по созданию и анализу алгоритмов, аппроксимирующих решение. Задача о рюкзаке, хотя и NP-сложная, представляет собой один из наборов алгоритмов, которые все же можно аппроксимировать в любой заданной степени. Это означает, что задача имеет полиномиальную схему аппроксимации. Точнее, задача о рюкзаке имеет полностью полиномиальную схему аппроксимации (FPTAS). [27]
Жадный алгоритм аппроксимации
[ редактировать ]Джордж Данциг предложил жадный алгоритм аппроксимации для решения задачи о неограниченном рюкзаке. [28] В его версии предметы сортируются в порядке убывания стоимости на единицу веса. . Затем он помещает их в мешок, начиная с как можно большего количества копий предметов первого типа, пока в мешке не останется места для новых. При условии, что имеется неограниченное количество каждого вида предметов, если — максимальная стоимость предметов, которые помещаются в мешок, то жадный алгоритм гарантированно достигнет как минимум значения .
Для ограниченной задачи, где предложение каждого вида предметов ограничено, приведенный выше алгоритм может быть далек от оптимального. Тем не менее, простая модификация позволяет нам решить этот случай: предположим для простоты, что все предметы помещаются в мешок по отдельности ( для всех ). Построить решение жадно упаковывая вещи как можно дольше, т.е. где . Далее построим второе решение содержащий первый элемент, который не поместился. С дает верхнюю оценку ЛП-релаксации задачи, одно из множеств должно иметь значение не менее ; таким образом, мы возвращаем любой из и имеет большую ценность для получения -аппроксимация.
Можно показать, что средняя производительность сходится к оптимальному решению по распределению при частоте ошибок. [29]
Схема аппроксимации полностью полиномиального времени
[ редактировать ]Схема аппроксимации полностью полиномиального времени (FPTAS) для задачи о рюкзаке использует тот факт, что причина, по которой проблема не имеет известных решений с полиномиальным временем, заключается в том, что прибыль, связанная с предметами, не ограничена. Если округлить некоторые младшие цифры значений прибыли, то они будут ограничены полиномом и 1/ε, где ε — граница правильности решения. Это ограничение означает, что алгоритм может найти решение за полиномиальное время, которое является правильным в пределах коэффициента (1-ε) от оптимального решения. [27]
algorithm FPTAS is input: ε ∈ (0,1] a list A of n items, specified by their values, , and weights output: S' the FPTAS solution P := max // the highest item value K := ε for i from 1 to n do := end for return the solution, S', using the values in the dynamic program outlined above
Теорема: множество вычисленное по приведенному выше алгоритму, удовлетворяет , где является оптимальным решением.
Квантовая приближенная оптимизация
[ редактировать ]Алгоритм квантовой аппроксимационной оптимизации (QAOA) можно использовать для решения задачи о рюкзаке с использованием квантовых вычислений путем минимизации гамильтониана задачи. Гамильтониан Ранца строится путем включения условия ограничения в функцию стоимости задачи со штрафным членом. [30] где — штрафная константа, которая определяется путем точной настройки для конкретного случая.
Отношения доминирования
[ редактировать ]Решение задачи о неограниченном рюкзаке можно упростить, выбрасывая предметы, которые никогда не понадобятся. Для данного предмета , предположим, мы могли бы найти набор предметов так, чтобы их общий вес был меньше веса , а их общая стоимость больше, чем стоимость . Затем не может появиться в оптимальном решении, потому что мы всегда можем улучшить любое потенциальное решение, содержащее заменив с набором . Поэтому мы можем пренебречь -ый пункт вообще. В таких случаях говорят, что доминирует . (Обратите внимание, что это не относится к задачам об ограниченном рюкзаке, поскольку мы, возможно, уже израсходовали предметы в .)
Нахождение отношений доминирования позволяет существенно уменьшить размер пространства поиска. Существует несколько типов отношений доминирования . [11] все которые удовлетворяют неравенству вида:
, и для некоторых
где и . Вектор обозначает количество копий каждого члена .
- Коллективное доминирование
- The -й предмет коллективно доминирует , записанный как , если общий вес некоторой комбинации предметов в меньше, чем wi , а их общая стоимость больше, vi чем . Формально, и для некоторых , то есть . Проверка этого доминирования сложна с вычислительной точки зрения, поэтому ее можно использовать только с помощью подхода динамического программирования. Фактически, это эквивалентно решению меньшей задачи о ранце, где , , и элементы ограничены .
- Пороговое доминирование
- The -th элемент является доминируют пороговым значением , в котором , записанный как , если некоторое количество копий преобладают . Формально, , и для некоторых и . Это обобщение коллективного доминирования, впервые представленное в [19] и используется в алгоритме EDUK. Самый маленький такой определяет порог элемента , написано . В этом случае оптимальное решение может содержать не более копии .
- Множественное доминирование
- The -th элемент многократно доминирует один элемент , записанный как , если преобладает некоторое количество копий . Формально, , и для некоторых то есть . Это доминирование можно эффективно использовать во время предварительной обработки, поскольку его можно относительно легко обнаружить.
- Модульное доминирование
- Позволять быть лучшим предметом , т.е. для всех . Это предмет с наибольшей плотностью стоимости. -th элемент модульно доминирует один элемент , записанный как , если преобладает плюс несколько копий . Формально, , и то есть .
Вариации
[ редактировать ]Существует множество вариаций задачи о рюкзаке, возникших в результате огромного количества приложений основной задачи. Основные вариации происходят за счет изменения количества какого-либо параметра задачи, например количества предметов, количества целей или даже количества рюкзаков.
Многоцелевая задача о рюкзаке
[ редактировать ]Этот вариант меняет цель человека, наполняющего рюкзак. Вместо одной цели, такой как максимизация денежной прибыли, цель может иметь несколько измерений. Например, это могут быть экологические или социальные проблемы, а также экономические цели. Часто решаемые проблемы включают оптимизацию портфеля и транспортной логистики. [31] [32]
В качестве примера предположим, что вы управляете круизным лайнером. Вам предстоит решить, сколько известных комиков нанять. Эта лодка может вместить не более одной тонны пассажиров, а артисты должны весить менее 1000 фунтов. Каждый комик имеет вес, приносит в бизнес исходя из своей популярности и просит определенную зарплату. В этом примере у вас несколько целей. Вы, конечно, хотите максимизировать популярность ваших артистов, минимизируя при этом их зарплату. Кроме того, вы хотите, чтобы было как можно больше артистов.
Многомерная задача о рюкзаке
[ редактировать ]В этом варианте вес предмета ранца задается D-мерным вектором и рюкзак имеет D-мерный вектор вместимости . Цель состоит в том, чтобы максимизировать сумму значений предметов в рюкзаке, чтобы сумма весов в каждом измерении не превышает .
Многомерный рюкзак сложнее в вычислительном отношении, чем рюкзак; даже для , проблема не имеет EPTAS, если только P НАПРИМЕР. [33] Однако алгоритм в [34] показано, что он эффективно решает разреженные экземпляры. Экземпляр многомерного рюкзака является разреженным, если существует множество для такой, что для каждого предмета рюкзака , такой, что и . Такие случаи возникают, например, при планировании пакетов в беспроводной сети с узлами ретрансляции. [34] Алгоритм от [34] также решает редкие случаи варианта с множественным выбором, многомерного рюкзака с множественным выбором.
Алгоритм IHS (полка увеличения высоты) оптимален для 2D-рюкзака (упаковка квадратов в двумерный квадрат единичного размера): когда в оптимальной упаковке не более пяти квадратов. [35]
Задача о нескольких рюкзаках
[ редактировать ]Этот вариант аналогичен задаче об упаковке контейнеров . Она отличается от задачи об упаковке корзин тем, что можно выбрать подмножество предметов, тогда как в задаче об упаковке корзин все предметы должны быть упакованы в определенные корзины. Идея в том, что рюкзаков несколько. Это может показаться тривиальным изменением, но оно не эквивалентно увеличению вместимости первоначального рюкзака. Этот вариант используется во многих задачах загрузки и планирования в исследовании операций и имеет схему аппроксимации с полиномиальным временем . [36]
Задача о квадратичном рюкзаке
[ редактировать ]Задача о квадратичном рюкзаке максимизирует квадратичную целевую функцию с учетом двоичных и линейных ограничений емкости. [37] Проблема была предложена Галло, Хаммером и Симеоне в 1980 году. [38] однако первое рассмотрение этой проблемы относится к Витцгаллу в 1975 году. [39]
Проблема суммы подмножества
[ редактировать ]Задача о сумме подмножества — это частный случай решения и задач 0–1, где вес каждого вида элементов равен значению: . В области криптографии термин «задача о рюкзаке» часто используется для обозначения проблемы суммы подмножества. Задача о сумме подмножеств — одна из 21 NP-полной задачи Карпа . [40]
Обобщение проблемы суммы подмножеств называется проблемой суммы множественных подмножеств, в которой существует несколько бункеров с одинаковой вместимостью. Показано, что обобщение не имеет FPTAS . [41]
Геометрическая задача о рюкзаке
[ редактировать ]В геометрической задаче о рюкзаке имеется набор прямоугольников разных значений и прямоугольный рюкзак. Цель состоит в том, чтобы упаковать в рюкзак как можно большую ценность. [42]
См. также
[ редактировать ]- Проблема упаковки контейнеров - Математическая и вычислительная задача
- Проблема внесения изменений : выбор наименьшего количества монет для получения заданной суммы денег.
- Комбинаторный аукцион – интеллектуальный рынок, на котором участники могут делать ставки на комбинации отдельных предметов, а не на отдельные предметы или непрерывное количество.
- Комбинаторная оптимизация - подраздел математической оптимизации.
- Постоянная проблема с рюкзаком
- Проблема сокращения запасов - Математическая проблема в исследовании операций.
- Рюкзачный аукцион
- Список проблем с рюкзаком
- Проблема с упаковкой — задачи, направленные на поиск наиболее эффективного способа упаковки объектов в контейнеры.
Примечания
[ редактировать ]- ^ Мэтьюз, Великобритания (25 июня 1897 г.). «О разделении чисел» (PDF) . Труды Лондонского математического общества . 28 : 486–490. дои : 10.1112/plms/s1-28.1.486 .
- ^ Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком . Берлин: Шпрингер. п. 449. ИСБН 978-3-540-40286-2 . Проверено 5 мая 2022 г.
- ^ Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком . Берлин: Шпрингер. п. 461. ИСБН 978-3-540-40286-2 . Проверено 5 мая 2022 г.
- ^ Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком . Берлин: Шпрингер. п. 465. ИСБН 978-3-540-40286-2 . Проверено 5 мая 2022 г.
- ^ Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком . Берлин: Шпрингер. п. 472. ИСБН 978-3-540-40286-2 . Проверено 5 мая 2022 г.
- ^ Фейерман, Мартин; Вайс, Харви (апрель 1973 г.). «Модель математического программирования для построения тестов и подсчета очков». Наука управления . 19 (8): 961–966. дои : 10.1287/mnsc.19.8.961 . JSTOR 2629127 .
- ^ Скиена, СС (сентябрь 1999 г.). «Кто и почему интересуется алгоритмами? Уроки из хранилища алгоритмов Стоуни-Брук». Новости ACM SIGACT . 30 (3): 65–74. CiteSeerX 10.1.1.41.8357 . дои : 10.1145/333623.333627 . ISSN 0163-5700 . S2CID 15619060 .
- ^ Пизингер, Д. 2003. Где проблемы с твердым рюкзаком? Технический отчет 2003/08, факультет компьютерных наук, Копенгагенский университет, Копенгаген, Дания.
- ^ Каччетта, Л.; Куланут, А. (2001). «Вычислительные аспекты задач о твердом рюкзаке». Нелинейный анализ . 47 (8): 5547–5558. дои : 10.1016/s0362-546x(01)00658-7 .
- ^ Дж. Джукен, П. Лейман, П. Де Каусмекер, Новый класс примеров сложных задач для задачи о рюкзаке 0–1 , Европейский журнал операционных исследований , 301 (3): 841-854, 2022.
- ^ Jump up to: а б с Пуарье, Винсент; Янев, Никола; Андонов, Румен (2009). «Гибридный алгоритм решения задачи о неограниченном рюкзаке» . Дискретная оптимизация . 6 (1): 110–124. дои : 10.1016/j.disopt.2008.09.004 . ISSN 1572-5286 . S2CID 8820628 .
- ^ Дж. Джукен, П. Лейман, П. Де Каусмекер, Особенности задачи о рюкзаке 0–1, основанные на максимальных решениях по включению , Европейский журнал операционных исследований , 311 (1): 36-55, 2023.
- ^ Войчак, Доминик (2018). «О сильной NP-полноте рациональных задач». Информатика – теория и приложения . Конспекты лекций по информатике. Том. 10846. стр. 308–320. arXiv : 1802.09465 . дои : 10.1007/978-3-319-90530-3_26 . ISBN 978-3-319-90529-7 . S2CID 3637366 .
- ^ Добкин, Дэвид; Липтон, Ричард Дж. (1978). «Нижняя граница ½ n 2 о программах линейного поиска для задачи о рюкзаке» . Journal of Computer and System Sciences . 16 (3): 413–417. doi : 10.1016/0022-0000(78)90026-0 .
- ^ Фактически, нижняя оценка применима к задаче о сумме подмножеств, которая является частным случаем Knapsack.
- ^ Майкл Стил, Дж; Яо, Эндрю С. (1 марта 1982 г.). «Нижние оценки алгебраических деревьев решений» . Журнал алгоритмов . 3 (1): 1–8. дои : 10.1016/0196-6774(82)90002-5 . ISSN 0196-6774 .
- ^ Бен-Амрам, Амир М.; Галил, Цви (2001), «Топологические нижние границы алгебраических машин произвольного доступа», SIAM Journal on Computing , 31 (3): 722–761, doi : 10.1137/S0097539797329397 .
- ^ ауф дер Хайде, Мейер (1984), «Алгоритм полиномиального линейного поиска для n -мерной задачи о рюкзаке», Journal of the ACM , 31 (3): 668–676, doi : 10.1145/828.322450
- ^ Jump up to: а б Андонов, Румен; Пуарье, Винсент; Раджопадхе, Санджай (2000). «Задача о неограниченном рюкзаке: новый взгляд на динамическое программирование». Европейский журнал операционных исследований . 123 (2): 168–181. CiteSeerX 10.1.1.41.2135 . дои : 10.1016/S0377-2217(99)00265-9 .
- ^ С. Мартелло, П. Тот, Проблемы с рюкзаком: алгоритмы и компьютерные реализации, Джон Уайли и сыновья, 1990 г.
- ^ С. Мартелло, Д. Пизингер, П. Тот, Динамическое программирование и сильные оценки для задачи о рюкзаке 0-1 , Manag. наук. , 45:414–424, 1999.
- ^ Плато, Г.; Элькихель, М. (1985). «Гибридный алгоритм решения задачи о рюкзаке 0–1». Методы опер. Рез . 49 : 277–293.
- ^ Мартелло, С.; Тот, П. (1984). «Смесь динамического программирования и метода ветвей и границ для задачи о сумме подмножества». Менеджер. Наука . 30 (6): 765–771. дои : 10.1287/mnsc.30.6.765 .
- ^ Горовиц, Эллис; Сахни, Сартадж (1974), «Вычисление разделов с применением к задаче о рюкзаке», Журнал Ассоциации вычислительной техники , 21 (2): 277–292, doi : 10.1145/321812.321823 , hdl : 1813/5989 , MR 0354006 , S2CID 16866858
- ^ Недерлоф, Йеспер; Венгжицкий, Кароль (12 апреля 2021 г.). «Улучшение алгоритма Шреппеля и Шамира для вычисления суммы подмножества с помощью ортогональных векторов». arXiv : 2010.08576 [ cs.DS ].
- ^ Шреппель, Ричард; Шамир, Ади (август 1981 г.). "Алгоритм $T = O(2^{n/2})$, $S = O(2^{n/4})$ для некоторых NP-полных задач" . SIAM Journal по вычислительной технике . 10 (3): 456–464. дои : 10.1137/0210033 . ISSN 0097-5397 .
- ^ Jump up to: а б Вазирани, Виджай. Алгоритмы аппроксимации. Springer-Verlag Берлин Гейдельберг, 2003 г.
- ^ Данциг, Джордж Б. (1957). «Экстремальные задачи с дискретной переменной». Исследование операций . 5 (2): 266–288. дои : 10.1287/opre.5.2.266 .
- ^ Кальвин, Джеймс М.; Люнг, Джозеф Ю.-Т. (1 мая 2003 г.). «Анализ жадного алгоритма в среднем для задачи о рюкзаке 0/1». Письма об исследованиях операций . 31 (3): 202–210. дои : 10.1016/S0167-6377(02)00222-5 .
- ^ Лукас, Эндрю (2014). «Формулировки Изинга многих задач NP» . Границы в физике . 2 : 5. arXiv : 1302.5843 . Бибкод : 2014FrP.....2....5L . дои : 10.3389/fphy.2014.00005 . ISSN 2296-424X .
- ^ Чанг, TJ и др. Эвристика для оптимизации портфеля с ограничением по мощности . Технический отчет, Лондон SW7 2AZ, Англия: Школа менеджмента, Imperial Колледж, май 1998 г.
- ^ Чанг, CS и др. « Бикритериальная оптимизация на основе генетического алгоритма для тяговых подстанций в железнодорожной системе постоянного тока ». У Фогеля [102], 11–16.
- ^ Кулик, А.; Шахнай, Х. (2010). «Для двумерного рюкзака не существует EPTAS» (PDF) . Инф. Процесс. Летт . 110 (16): 707–712. CiteSeerX 10.1.1.161.5838 . дои : 10.1016/j.ipl.2010.05.031 .
- ^ Jump up to: а б с Коэн Р. и Гребла Г. 2014. «Многомерное планирование OFDMA в беспроводной сети с ретрансляционными узлами» . в Proc. IEEE INFOCOM'14 , 2427–2435.
- ^ Ян Лан, Дьёрдь Доса, Синь Хан, Чэньян Чжоу, Аттила Бенко [1] : 2D-рюкзак: упаковка квадратов , Theoretical Computer Science Vol. 508, стр. 35–40.
- ^ Чандра Чекури и Санджив Кханна (2005). «ПТАС для решения задачи о нескольких рюкзаках». SIAM Journal по вычислительной технике . 35 (3): 713–728. CiteSeerX 10.1.1.226.3387 . дои : 10.1137/s0097539700382820 .
- ^ Ву, З.Ы.; Ян, YJ; Бай, ФС; Мамедов, М. (2011). «Глобальные условия оптимальности и методы оптимизации для квадратичных задач о рюкзаке». J Приложение теории оптимизма . 151 (2): 241–259. дои : 10.1007/s10957-011-9885-4 . S2CID 31208118 .
- ^ Галло, Г.; Хаммер, Польша; Симеоне, Б. (1980). «Задачи о квадратном рюкзаке». Комбинаторная оптимизация . Исследования по математическому программированию. Том. 12. С. 132–149. дои : 10.1007/BFb0120892 . ISBN 978-3-642-00801-6 .
- ^ Вицгалл, К. (1975). «Математические методы выбора места для систем электронных сообщений (EMS)». Технический отчет NASA Sti/Recon N. 76 . Внутренний отчет НБС: 18321. Бибкод : 1975STIN...7618321W .
- ^ Ричард М. Карп (1972). « Сводимость среди комбинаторных задач ». В RE Miller и JW Thatcher (редакторы). Сложность компьютерных вычислений. Нью-Йорк: Пленум. стр. 85–103
- ^ Капрара, Альберто; Келлерер, Ганс; Пферши, Ульрих (2000). «Проблема суммы множественных подмножеств» . СИАМ Дж. Оптим . 11 (2): 308–319. CiteSeerX 10.1.1.21.9826 . дои : 10.1137/S1052623498348481 .
- ^ Гальвез, Уолдо; Грандони, Фабрицио; Ингала, Сальваторе; Гейдрих, Сэнди; Хан, Ариндам; Визе, Андреас (2021). «Аппроксимация геометрического рюкзака с помощью L-упаковок» . АКМ Транс. Алгоритмы : 33:1–33:67. arXiv : 1711.07710 . дои : 10.1145/3473713 .
Ссылки
[ редактировать ]- Гэри, Майкл Р .; Дэвид С. Джонсон (1979). Компьютеры и трудноразрешимые проблемы: Руководство по теории NP-полноты . У. Х. Фриман. ISBN 978-0-7167-1045-5 . А6: MP9, стр. 247.
- Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком . Спрингер. дои : 10.1007/978-3-540-24777-7 . ISBN 978-3-540-40286-2 . МР 2161720 . S2CID 28836720 .
- Мартелло, Сильвано; Тот, Паоло (1990). Задачи о рюкзаке: Алгоритмы и компьютерные реализации . Уайли-Интерсайенс. ISBN 978-0-471-92420-3 . МР 1086874 .
Внешние ссылки
[ редактировать ]- Репозиторий GitHub, содержащий примеры сложных задач с рюкзаком 0–1.
- Репозиторий GitHub, содержащий функции для определения того, что делает экземпляр задачи о рюкзаке 0-1 сложным.
- Слайды лекции по задаче о рюкзаке
- PYAsUKP: Еще один решатель проблемы неограниченного рюкзака с кодом, использующим преимущества отношений доминирования в гибридном алгоритме, тестах и загружаемых копиях некоторых статей.
- Домашняя страница Дэвида Пизингера с копиями некоторых статей из списка публикаций, которые можно загрузить (в том числе «Где проблемы с твердым рюкзаком?»)
- Решения задач о рюкзаке на многих языках в Rosetta Code
- Алгоритм динамического программирования для решения задачи о рюкзаке 0/1
- Решение проблем с рюкзаком (онлайн)
- Решение задачи 0-1-KNAPSACK с помощью генетических алгоритмов в Ruby. Архивировано 23 мая 2011 г. на Wayback Machine.
- Коды для задачи о квадратичном рюкзаке. Архивировано 14 февраля 2015 г. на Wayback Machine.