LINUX.ORG.RU

задачка


0

1

в магазин, торгующий одеждой, пришли n покупателей: каждый покупатель хочет купить костюм и рубашку, однако в магазине осталось n рубашек и n костюмов. Стоимость каждого костюма и каждой рубашки известна. Удастся ли подобрать одежду для всех, если известно, сколько каждый покупатель может заплатить за покупки.

я правильно понимаю что это задача о паросочетаниях? получается, рассматривается распределение n объектов первого множества по n объектам второго множества. В нашей же задаче рассматривается сочетание n объектов второго и третьего множества, по n объектам первого множества.

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



Последнее исправление: Drdiesel (всего исправлений: 2)

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

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

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

Что значит похоже? Да, это задача целочисленного линейного программирования. Только вот в общем случае она NP-полна.

Waterlaz ★★★★★
()
Ответ на: комментарий от Drdiesel

это не NP-полная задача, рачок

Она следует читать как «целочисленная задача линейного программирования».

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Она следует читать как «целочисленная задача линейного программирования».

Извините, а можно пруф того, что именно линейного?

metar ★★★
()
Ответ на: комментарий от stack_protector

Только вот оптимизировать нечего.

не важно

Waterlaz ★★★★★
()

У всех n покупателей один и тот же размер одежды?!

ttnl ★★★★★
()
Ответ на: комментарий от metar

Извините, а можно пруф того, что именно линейного?

Переменные Pij и Kij из {0, 1}. Pij - покупает ли i-ый покупатель j-ую рубашку? Kij - аналогично про костюм.

если Vpi - стоимость i-той рубашки, Vki - стоимость i-того костюма, то ограничения такого плана:

сумма по i из Pij = 1 для всех j (каждую рубашку купили один раз)

сумма по j из Vpj*Pij + Vkj*Pij <= Mi (i-ый полкупатель потратил не больше Mi денег)

итд...

Waterlaz ★★★★★
()
Ответ на: комментарий от stack_protector

Только вот оптимизировать нечего.

количество денег на руках покупателей минимально.

dimon555 ★★★★★
()
Ответ на: комментарий от Waterlaz

итд...

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

metar ★★★
()
Ответ на: комментарий от metar

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

Как это сделать я не знаю. Ограничения линейны. Целевую функцию любую линейныую напиши, не принципиально. => линейное целочисленное программирование.

Waterlaz ★★★★★
()

Я правильно понимаю, что n во всех упоминаниях одно и то же?

blexey ★★★★★
()

А как же вкусовые предпочтения?

korvin_ ★★★★★
()
Ответ на: комментарий от Waterlaz

Тут не обязательно искать решение. Достаточно доказать что любые k покупателей могут себе позволить k юбок и рубашек

Drdiesel
() автор топика
Ответ на: комментарий от metar

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

anonymous
()

я конечно неуч, но тут кажется условий не хватает. Пришли покупатели, у каждого по 1000р на руках, рубашка и костюм стоят минимум по 1100р, в итоге никто ничего не купил.

swelf ★
()
Ответ на: комментарий от anonymous

1. допустить отсутсвие покупок у покупателя
2. после этого искать максимально возможное количество обслуженных покупателей
3. ???
4. Ответ на вопрос задачи

fixed
Вот пункт 3 мне непонятен. Как вы «максимально возможное количество обслуженных покупатетелей» предлагаете искать?

metar ★★★
()
Ответ на: комментарий от Drdiesel

поиск паросочетаний же

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

metar ★★★
()

Удастся ли подобрать одежду для всех, если известно, сколько каждый покупатель может заплатить за покупки.

Нет, не удастся. Это очевидно.

aedeph ★
()

так вот вопрос как подбирать пары

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

nvkz
()
Ответ на: комментарий от nvkz

Сперва обслуживать тех у кого наименьшая сумма, продавать им самую дорогую пару рубашка + костюм, утруждаться с перебором ненужно так как от перемены мест слагаемых сумма покупки не поменяется.

есть подозрение, что «изменчивость» набора «рубашка + костюм» может внести свои коррективы... Сейчас попробую подобрать данные

yyk ★★★★★
()
Ответ на: комментарий от yyk

Вот простейший набор:

Р - 35 40 45
К - 60 65 65

клиенты:
100, 105, 105

первый клиент с суммой 100 рублей, но его можно отоварить 2-мя способами, от выбора зависит дадите вы верный ответ или нет.

yyk ★★★★★
()
Ответ на: комментарий от yyk

И правда я оказался неправ)

Можно попробовать добавить еще одно действие: При равных суммах пар рубашка + костюм, продавать тут пару у которой самая дорогая одна вещь (рубашка или костюм), если таких пар опять несколько то нужно посчитать сумму всех рубашек и костюмов, и если сумма рубашек больше то продавать пару с дорогой рубашкой иначе на оборот.

nvkz
()
Ответ на: комментарий от nvkz

вот другой пример:

Р - 34 40 45 К - 60 65 65

клиенты: 100, 105, 105

равных сумм нет, алгоритм даст сбой - нельзя брать максимальную сумму 40+60, надо предыдущую 34+65

yyk ★★★★★
()
Ответ на: комментарий от yyk

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

nvkz
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.