Нахождение идеальной комбинации подходящих предметов

Есть небольшая проблема истории. Я попытаюсь объяснить это как домашнее задание:

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

Хитрая часть выделена в этом примере: скажем, для маленьких велосипедных рам требуется, чтобы в тележке был набор маленьких велосипедных колес. Малые велосипедные колеса также совместимы со средними велосипедными рамами.

Если ваша корзина состоит из 2 средних велосипедных рам, 1 маленькой велосипедной рамы, 2 средних велосипедных колес и 1 небольших велосипедных колес, вы должны обязательно соединить маленькие колеса с небольшой рамой. Вполне возможно, что сначала вы оцените 2 средних велосипедных рамы, соедините их с маленькими велосипедными колесами и одним из средних велосипедных колес, а затем у маленькой велосипедной рамы нет соответствующих колес в корзине, и она будет выделена и отключит Checkout.

Как эффективно можно программно проверить эту корзину? Мой друг придумал рекурсивную функцию, которая не очень эффективна, и более или менее грубо форсирует все возможные комбинации перед завершением проверки. Я ищу что-то более производительное, и я чувствую, что должен быть какой-то умный алгоритм, чтобы определить это быстрее.

Я пытался придумать что-то, что можно сделать, выбрав только наиболее желаемый товар из опций в корзине, но я легко смог разбить свои решения, варьируя то, что находится в корзине и каковы их требования / количества, и каков их порядок оценки.

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

Я напишу это в Javascript, но на самом деле решением может быть даже псевдокод. Просто ищу эффективную стратегию для решения этой проблемы. Спасибо за любые идеи.

Всего 1 ответ


Похоже, было бы неплохо создать объект со свойствами определенных критериев (будь то логическое значение или элементы). Затем вы можете проверить их, используя оператор if или switch . «Корзина» может быть массивом этих объектов. Я не работал с классами раньше, но это может быть решением для выкладывания большого количества предметов.


Есть идеи?

10000