0

Я изо всех сил, чтобы придумать решение для этой задачи для алгоритмов курса:Алгоритм: Покупка коллекции товаров с ваучерами

Вы идете в магазин и хотите купить п = {п , n , ..., n n} товар, где предметы могут быть разными или нет.

В магазине проводится следующее продвижение по службе: «Если клиент покупает две статьи, чьи цены складываются до значения, которое заканчивается на 11, 33 или 55 центов, он получит ваучер, соответствующий соответствующему значению цен».

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

Например: Если вам нужно купить 3 продукты (п , п , п) с ценами (1.01 $, 2.10 $ и 3 $), вы должны купить п и n вместе и купите n отдельно, с общей стоимостью: (1.01 + 2.10) + 3 - (0.11) = 6 $.

Никакой намек не дается, но я думаю, что могу использовать некоторый подход к потоковым сетям.

+0

Так же этот курс дает подсказку о сложности задачи (P vs. NP-трудной)? – sascha

+0

Нет, не более того, что было сказано. :/ – joaoaccarvalho

ответ

0

Сортировка товаров, которые вы хотите купить по ценным ценам ... т. Е. (25.01 $, 1.02 $, ..., 0.99 $).

И тогда проверьте ... ли какой-либо из центах сумма до 0.99 $ ... Это легко решить по двум суммам ... Вы берете 0,01 $ и ищите его комплимент 0,98 $ с помощью двоичного кода search ... Удалите эту пару и повторите, пока не найдете пары продуктов с центами, которые суммируются до 0.99 $.

Если это сделано, удалите найденные пары продуктов ... подсчитайте свою прибыль и проверьте, составляет ли какой-либо из центов до 0,88 $ ... Точно так же.

...

Если это будет сделано, удалить найденные пары продуктов ... и проверить любое ли из центов суммы до 0.11 $ ... таким же образом.

Это все O(nlogn) сложность;)

+0

Ваше решение не учитывает несколько комбинаций. Если у вас есть цены, такие как 1,05, 2,06, 0,05, 0,01, то приемлемы как 1,05 + 2,06, так и 0,05 + 2,06, а второй дешевле. Поэтому, если вам нужно купить три предмета, вы можете потратить 0,05 + 2,06 + 0,01 вместо 1,05 + 2,06 + 0,01. Кроме того, как вы выполняете двоичный поиск по суммам? Вы заранее не знаете, какую ценность вы ищете. – ChatterOne

+0

«оптимальная стратегия для покупки данной коллекции товаров» ... поэтому предметы даются ... например. мы хотим купить 3 предмета, которые стоят 1.05, 2.06, 0.05 ... и мы всегда сохраняем 0.11 $. Не имеет значения, какую пару мы возьмем в этом случае;) –

+0

Пожалуйста, прочтите мой комментарий полностью, а не только последнее предложение – ChatterOne

Смежные вопросы