|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.03.2015, 00:29 | #1 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Взять уникальные карточки из каждой колоды с максимальной суммой на выходе
Здравствуйте. Нужна помощь в решении задачи на подобии той, что опишу ниже без использования полного перебора. Какой метод решения лучше будет использовать? Я сидел думал на счет динамики, но как-то туго все.
Задача: Есть несколько колод с карточками. Каждая карточка имеет цвет и число. Необходимо из каждой колоды взять по одной карточке так, чтобы цвета не повторялись, а сумма чисел была максимальной или сказать, что так сделать не получится. И нарисовал небольшую иллюстрацию задачи: |
22.03.2015, 11:52 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Задача не понятна. Какая информация есть о содержимом колод?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
22.03.2015, 12:21 | #3 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Для каждой колоды надо найти по одной карточке каждого из доступных в ней цветов с наибольшим значением, для начала. Т.е. в иллюстрации карточка со значением 4 удаляется.
Это изменяет размерность задачи, т.к. размер колоды теперь в худшем случае равен количеству цветов. Ну а дальше... можно попробовать даже полный перебор (если цветов и колод не десятки). Если не пройдет - улучши перебор при помощи жадного алгоритма. Задача стопудово сводится к поиску остовного дерева, но как эффективно его сюда вкрутить чтобы оценка была O (E*log V), не скажу. т.к. уже опаздываю ). Если нужно E log V - то задача не очень тривиальная, готовый код просто так врядли кто-то выложит )) |
26.03.2015, 21:13 | #4 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Ошибся я вроде бы. Остовное дерево к задаче отношения не имеет. Ничего лучше алгоритма ветвей и границ я по задаче не придумал. Оно точно есть?
Т.е. находишь первый вариант решения задачи, затем ищешь вариант, который улучшит текущий. Если на каком то шаге стало понятно, что улучшить не получится - дальше не перебираешь (поднимаешься по дереву решений вверх и пробуешь другую ветвь) |
26.03.2015, 21:45 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Тоже кроме задачи коммивояжера примерно по такому графу в голову ни чего не приходит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.03.2015, 05:00 | #6 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Это не комивояжер (поэтому и не подойдут остовные деревья). Пусть может содержать только по одной точке разных цветов. При переходе часть дуг как бэ удаляется, но при этом изначально дуг зверски много - порядка V^{V-1}.
|
27.03.2015, 06:17 | #7 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
На данном этапе перебор все равно нужен. ТС как-то мутно описал задачу. Я бы формировал в рамках каждой колоды списки с картами одного цвета (то есть внутри колод формировал новые колоды в которых карты будут только одного цвета). Затем уже сравнивал с другими колодами того же цвета и там находил наибольшую карту. Как видите уже для сортировки в любом случае будет требоваться полный перебор. В задаче комивояжера, которую тоже пытались тут применить идет построение матриц, то есть все равно так или иначе используется полный перебор.
На текущем этапе, не имея дополнительной информации, для достижения наилучшего результата в подавляющем большинстве случаев Вам в любом случае потребуется как минимум один полный перебор всех элементов.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
27.03.2015, 07:41 | #8 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
kangreon, поясни на примере
Вот есть Карточки.jpg Каков будет верный ответ? 1. Не получается, так как в "максимальном" наборе есть одинаковые цвета Не получается.jpg Или 2. Вот такие наборы имеют максимальную сумму при разных по цвету карточках Получается.jpg или И так тоже получается.jpg Насколько я понял, правильный 1-ый вариант ответа. Алгоритм тогда довольно простой. Но без перебора все равно никак. Хотя при случае, когда "не получается", можно перебор прервать до полного завершения (максимальные карточки из разных колод имеют один цвет - следующие колоды можно уже не проверять). Последний раз редактировалось Sibedir; 27.03.2015 в 15:19. |
27.03.2015, 11:21 | #9 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Я понял что ему нужен второй вариант . Иначе нафига эта муть с разными цветами, если мы тупо ищем максимальный в колоде? Но хоть так хоть эдак все равно перебор нужен.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
27.03.2015, 11:35 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Имеется в виду перебор всех возможных вариантов выбора. Вот без него как? Как выше предложено в каждой колоде оставить по одной карте каждого цвета с максимальным весом. Переходы начинать с колоды с минимальным количеством карт. Каждый переход часть оставшихся узлов и дуг отсекает. Почему нельзя назвать его вариантом задачи коммивояжера? Набор узлов и ветвей правда динамически меняется, но в сторону уменьшения, в процессе перебора
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача на паскаль: в линейном массиве найти пару элементов с максимальной суммой | kirito_17 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 05.12.2013 10:25 |
Найти натуральное число из интервала от a до b с максимальной суммой делителей | Salomon9393 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 04.12.2012 16:57 |
Pascal.Найти в промежутке от a до b число, с максимальной суммой делителей. | I3ECJI0 | Помощь студентам | 2 | 16.05.2012 15:39 |
Как вывести на экран номер строки с максимальной суммой элементов и номер столбца с минимальной суммой? | Vetal888888 | C# (си шарп) | 4 | 20.12.2011 13:46 |
В квадратной матрице найти столбец с максимальной суммой и строку с максимальной суммой (Pascal) | Alexey355 | Помощь студентам | 1 | 26.03.2011 14:06 |