Учитывая список продуктов, доступных в магазине, мне нужно выбрать набор продуктов для моей тележки таким образом, чтобы мое значение корзины было максимально возможным. Ограничения, как, тележка имеет размер l*w*h
. Выбранные продукты должны индивидуально и полностью вставляться в корзину, что дает максимальную возможную ценность для тележки. Можно выбрать один элемент на продукт.Выберите продукты, чтобы получить максимальную стоимость корзины
У меня есть product id
, price
, l
, w
, ht
, weight
каждого продукта со мной. Как это можно сделать?
Я придумал логику, как показано ниже.
- объем Рассчитать повозки
- Рассчитать объем продукта и стоимость продукта на кубический сантиметр, используя его цене
- Сортировки списка продукта на основе стоимости/CUCM
- Начало добавления продуктов из отсортированного списка как 1, 2, 3 и т. д., пока тележка не заполнится.
- Если изделие не может поместиться в корзину, пропустите его и выберите следующий возможный продукт из отсортированного списка.
- После получения списка проверьте, может ли какой-либо продукт в выбранном списке заменить на другой продукт с меньшим объемом, но в результате получается больше значения корзины.
Но это не дает мне правильный список продуктов с максимальной стоимостью корзины. В чем проблема в вышеуказанной логике?
Это звучит как проблема с рюкзаком, которую вы можете решить с помощью методов динамического программирования: https://en.wikipedia.org/wiki/Knapsack_problem. Помните, что проблема Knapsack NP-полная, поэтому алгоритм займет много времени для больших списков продуктов. – Jeremy
Проблема с вашей логикой заключается в том, что решение «Должен ли я помещать этот продукт в корзину» не обязательно определяется отношением стоимости/стоимости, а также другими факторами, такими как «Существуют ли замещающие продукты A и B, которые имеют более высокую (комбинированную) соотношение стоимости/стоимости, если я помещаю их в свою корзину вместо продукта C ". – Jeremy