Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка комбинаций элементов 
:(
    Опции темы
sergejzr
Дата 17.12.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Знаю, название туповатое и не отражает суть проблемы smile Можно будет переименовать позже...

Итак проблема: Существуют N кучек чисел. Можно составлять комбинации, беря по числу из каждой кучки. Вес каждой комбинации  - банальная сумма содержащихся чисел. 


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

пример с N=3:

Кучка1: 10,5
Кучка2: 9,3
Кучка3: 10,5

соответственно комбинации и их порядок на выходе:

1) 10+9+10=29
2) 10+9+5=24
3) 10+9+5=24
4) 10+3+10=23
5) 5+9+5=19
6) 10+3+5=18
7) 10+3+5=18
8) 5+3+5=13

Решение влоб - создать всевозможные комбинации и рассортировать их. Решение не подходит, так как комбинаций может быть очень много.




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Akina
Дата 17.12.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(sergejzr @  17.12.2008,  01:35 Найти цитируемый пост)
Решение не подходит, так как комбинаций может быть очень много.

А каков порядок этого "очень много"?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sergejzr
Дата 17.12.2008, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Порядок не определён. Ни количество в кучке, ни количество самих кучек. Может быть сколько угодно.

Добавлено через 40 секунд
Допустим 1 мио в каждой кучке и таких кучек 20.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
maxim1000
Дата 18.12.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



прикольная задачка
общего решения, чтобы порядок сложности перехода к каждому элементу был вменяемым, в голову не пришло
однако появилась такая мысль:
если на самом деле интересны не все сочетания, а, например, первые M штук, то можно попробовать уменьшить сложность их получения
можно доказать, что первые M сочетаний используют только первые M элементов из каждой кучки (ну уж кучки отсортировать придётся)
так что алгоритм такой:
сначала берём по первому элементу из каждой кучки - это наш первый ответ
а на каждом следующем шаге K добавляем в какой-нибудь контейнер S все сочетания, содержащие хотя бы один элемент с номером K, а остальные элементы с номерами не больше K
потом выбираем наибольший, удаляем его из контейнера и возвращаем, как ответ

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

иллюстрация:
кучка1: 9,8,7,6,5,...
кучка2: 7,5,4,2,...
кучка3: 4,3,2,1,...

K=1:
  S<<9+7+4 //=20
  S={20}
  S>>20 (он же максимальный)
  S={}
  return 20;
K=2:
  S<<8+7+4 //=19
  S<<8+7+3 //=18
  S<<8+5+4 //=17
  S<<8+5+3 //=16
  S<<9+5+4 //=18
  S<<9+5+3 //=17
  S<<9+7+3 //=19
  S={19,19,18,18,17,17,16}
  S>>19
  S={19,18,18,17,17,16}
  return 19;
...

Добавлено через 2 минуты и 57 секунд
а вообще, можно попробовать поиспользовать какую-нибудь дополнительную информацию о числах в кучках (например, что в одной кучке числа будут значительно меньше/больше чисел в других кучках)

Это сообщение отредактировал(а) maxim1000 - 18.12.2008, 22:47


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.