![]() |
|
|
![]()
|
|
| 46&two |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 6.2.2004 Репутация: нет Всего: нет |
дело так:
нада налепить алгоритм, который умеет генерировать все размещения (ну или очередное размещение) N различных элементов по M (M>N) ячейкам. так, чтобы запуск этой функции в цикле выдавал каждый раз новое размещение. ясно, что если N==M, получается генератор перестановок. такого добра навалом. Генератор размещений я не нашел и, честно говоря, затрудняюсь с построением алгоритма. если у кого завалялся реализованный алгоритм (на каком языке не важно, но лучше, разумеется C), то буду очень благодарен..... |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Ну вот алгоритм рекурсивный "на вскидку" написал, если нужно именно итеративный, скажи.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| 46&two |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 6.2.2004 Репутация: нет Всего: нет |
Да, нехило.
Только не соображу, как эту функцию преобразвать к формату вида
которая в *a запихивает очередное размещение, а возвращает ноль, если все варианты перебраны и 1 - если нет. чтобы ее можно было пускать в цикле вида
Это сообщение отредактировал(а) 46&two - 19.2.2004, 09:45 |
||||
|
|||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Чтобы использовать рекурсивную функцию это дело не пойдет. Надо писать итеративный способ решения задачи. Могу подсказать: количество размещений k элементов по n ячейкам = биномиальный коэффициент (n-1+k над n-1).
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
если взять все перестановки и вырезать последние (M-N) элементов, то получим все размещения (только надо убрать одинаковые) -------------------- qqq |
|||
|
||||
| 46&two |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 6.2.2004 Репутация: нет Всего: нет |
ясное дело, что получим. вот только как вырезать? проблема в том, что: 1 - такой алгритм не оптимален - много действий 2 - как сравнивать - по совпадению? это надо быть бааальшим пофигистом, чтобы так по-варварски писать.... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
иногда важна скорость работы алгоритма, а иногда - скорость его разработки, я же не знаю какой у тебя случай, вдруг тебе быстро надо а вырезать нужно просто последние M-N элементов и выкидывать повторяющиеся размещения а еще попробуй посмотреть http://forum.vingrad.ru/index.php?act=ST&f=13&t=17026, предложенную там функцию несложно переделать для размещений -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |