База знаний для подготовки к ОГЭ и ЕГЭ, проверенная Российской академией наук

Перебор вариантов с помощью дерева

Задача о рюкзаке — это NP-полная задача комбинаторной оптимизации, в которой требуется выбрать набор предметов с определёнными весами и ценностями так, чтобы общая ценность выбранных предметов была максимальной, а суммарный вес не превышал заданную грузоподъёмность рюкзака.

Основные понятия

  • Грузоподъёмность рюкзака () — максимальный допустимый вес всех выбранных предметов.
  • Предметы — набор из вещей, каждая из которых имеет вес и ценность , где .
  • Переменные выбора — бинарные переменные , определяющие, выбран предмет () или нет ().

Математическая формулировка

Необходимо:

  • максимизировать функцию ценности:
 
  • при ограничении на суммарный вес:
 

Методы решения

Полный перебор вариантов

Перебор всех возможных комбинаций предметов (всего имеется предметов) для нахождения оптимального решения.

Для каждого предмета существует 2 варианта: предмет кладётся в рюкзак, либо предмет не кладётся в рюкзак. Количество вариантов растёт экспоненциально с увеличением числа предметов (), поэтому метод применим только для малых значений .

На рисунке показано дерево перебора для трёх предметов. Каждый лист соответствует некоторому подмножеству предметов. После составления дерева необходимо найти лист с максимальной ценностью среди тех, вес которых не превышает .

Метод ветвей и границ

Позволяет сократить количество рассматриваемых вариантов по сравнению с полным перебором. Строится дерево решений, в котором отсекаются заведомо неоптимальные ветви на основе оценок верхних границ ценности. Для каждого узла оценивается верхняя граница ценности решения, и продолжается построение дерева только для узла с максимальной оценкой. Когда максимальная верхняя граница оказывается в листе дерева, алгоритм заканчивает свою работу.

Динамическое программирование

Эффективно решает задачу при целочисленных весах предметов. Временная сложность метода — , где — количество предметов, — грузоподъёмность рюкзака.

Рекуррентное соотношение:

  • Инициализация:
 
  • Рекуррентные формулы:
 

Здесь — максимальная ценность при рассмотрении первых предметов и суммарном весе не более .

Жадный алгоритм

Заключается в сортировке предметов по убыванию удельной ценности () и последовательном добавлении их в рюкзак до достижения ограничения по весу. Даёт оптимальное решение для непрерывной версии задачи, но не гарантирует оптимальности в дискретном случае.

Применения

  • Планирование загрузки: оптимизация размещения грузов при ограниченной грузоподъёмности транспорта.
  • Инвестиционный портфель: выбор проектов для инвестирования при ограниченном бюджете.
  • Раскрой материалов: минимизация отходов при раскрое ресурсов (ткань, металл и др.).
  • Криптография: основа для построения некоторых алгоритмов шифрования, например, ранцевой криптосистемы Меркла — Хеллмана.

Заключение

Задача о рюкзаке является важной в теории алгоритмов и имеет множество практических приложений. Несмотря на её вычислительную сложность, существуют эффективные методы, позволяющие находить точные и приближённые решения, что делает её полезной в различных областях науки и техники.

Литература