@Aitd

Как лучше организовать алгоритм подсчета выгоды?

Дано:
Стандартная корзина товаров в магазине
  • Товар1 - 100р
  • Товар2 - 120р (акция) , базовая цена -150р
  • Товар3 - 90р (акция), базовая цена 100р

Общая сумма: 350р
Выгода по акциям: 40р
Итого : 310р

В корзине можно применять промокоды на скидку, кол-во промокодов неограниченно.
Промокод может быть
  1. Потоварный. Это значит что выгода промокода применяются к каждому товару, например промокод на 10р действующий на 3 товара даст 30р выгоды
  2. Корзинный. Это значит что он применяется 1 раз к товарам на которые действует (не ко всей корзине), например промокод на 10р действующий на 3 товара даст 10р выгоды

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

Необходимо:
Найти наибольшую для пользователю выгоду при наличии промокодов, акций и товаров
Понять как вообще сделать это всё рабочим?
Существуют ли алгоритмы которые могут помочь, или каким-то образом распределить данные чтобы можно было считать итоговую выгоду?

На данный момент я так понимаю существует необходимость расчета возможных корректных комбинаций и выбор из этих комбинации с наибольшей суммой, однако вопрос даже в том как корректно составить эти комбинации.
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Вам надо формализовать задачу. Аккуратно, с формулами, расписать все типы промокодов, как они действуют и взаимодействуют.

Если бы все промокоды давали процентную скидку, то можно было бы брать жадно, но эти абсолютные коды все ломают. Тут можно посмотреть не решение задачи о рюкзаке или о размене монет (динамическое программирование), похоже это позволит ускорить решение. Вроде как - перебрали какие процентные коды вы применяете и вот остается у вас сумма X. Вам надо абсолютными кодами набрать максимальное число не больше X.

А так полный перебор придется хотябы частично делать. Это рекурсивной функцией придется реализовать - гуглите "полный перебор" хоть даже тут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы