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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.