|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.03.2011, 20:26 | #1 | |
Пользователь
Регистрация: 12.03.2011
Сообщений: 16
|
Разделение предметов по весу
Здравствуйте.
Подскажите алгоритм решения вот такой задачи. Цитата:
|
|
31.03.2011, 20:54 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Перебор сдесь не поможет. При большом количестве предметов возникнет "информационный фзрыв". Поступают примено так:
Массив, сортируется по весам Выбираются два самых тыжеловесных предмета и суммируются в две переменные. Из оставшихся, опять беруться два и к самому лёгкому (лёгкой группе) из уже образованных, добавляется самый тыжёлый. Так поступаем до опустошения исходного массива. Веса полученных, будут макимально равны.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 31.03.2011 в 23:54. |
31.03.2011, 22:06 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Smitt&Wesson
у этого алгоритма есть название? просто интересно. с виду какой то жадный алгоритм равномерного распределения)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
31.03.2011, 23:52 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Да, согласен, жадноват он (названия не помню, просто где-то вычитал). Эту задачку можно решить, например, целочисленным симплекс-методом, но он в реализации довольно сложен, а этот "жадный" очень просто решить при помощи одного массива и двух реременных.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
01.04.2011, 06:15 | #5 | |
Пользователь
Регистрация: 12.03.2011
Сообщений: 16
|
Спасибо за ответ.
Цитата:
|
|
01.04.2011, 10:39 | #6 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Вы всё правильно поняли. Почему не будет? Поэкспериментируйте с монетками разного достоинства.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
01.04.2011, 11:11 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
niki123, задачу эту для чего решаете? (цель какую пытаетесь достигнуть, какой результат получить? ) N какой максимальной величины может быть?
Дело в том, что оптимальное решение может дать ТОЛЬКО перебор! Все остальные методы могут дать тольк весьма и весьма приближённое к оптимальному... Цитата:
есть веса: 15 11 8 8 8 2 очевидно, что решение две кучки по 26 (15+11) и (8+8+8+2) а по Вашему алгоритму как получается? |
|
01.04.2011, 11:34 | #8 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
из его решения выходит 25 и 27,
этот алгоритм по-моему неплох, при увеличении количества элементов, разница между группами (по отношению к размерам групп) будет если не уменьшаться то невелика |
01.04.2011, 13:49 | #9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
onewho, ага. а если взять 17 15 11 11 10 (разделение по 32: 17+15 и 11+11+10), то алгоритм даст 17 + 11 = 28 и 15+11+10=36 - отклонение в 4 единицы при оптимальном распределении 32 единицы. 12.5% погрешность..
Впрочем. согласен, если не стоит задача найти оптимальное распределение - то алгоритм крайне эффективен и вполне может быть использован практически. (тем более, что для сравнительно больших N результат перебор может занять ОЧЕНЬ продолжительное время!) Последний раз редактировалось Serge_Bliznykov; 01.04.2011 в 13:51. |
01.04.2011, 14:23 | #10 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Для оптимального решения (кроме перебора) существует алгоритм "поиск с возвращениями" на гра'фе. Я тоже о нём подумал вначале, но учитывая уровень подготовки топикстартера и условие задачи, предложил именно этот. Он не так эффективен, зато прост в реализации. Да и по скорости он быстрее чем обход графа.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 01.04.2011 в 14:28. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Структура данных для хранения предметов | L_M | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 5 | 15.11.2010 21:08 |
разделение чисел | Михаил2261 | Microsoft Office Excel | 4 | 07.09.2010 12:35 |
Составьте запрос, который позволяет подсчитать в таблице Экзамен количество различных предметов обучения. | настенка=) | Помощь студентам | 3 | 26.05.2010 03:16 |
Разделение. | Maksim_27_10 | Общие вопросы C/C++ | 8 | 21.04.2010 20:40 |
Задача на С++. формирование выбора предметов | Veina | Помощь студентам | 9 | 23.12.2009 00:39 |