![]() |
|
|
![]()
|
|
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Как рассчитать сабж? Понятно, первое, что приходит в голову, это (nxn)!, но ведь будут встречаться и одинаковые комбинации элементов.
Добавлено @ 07:03 Да, с условием того, что элементы из одной строки матрицы такие же, как и в остальных, т. е., к примеру, (1 2 3) (1 2 3) (1 2 3) И как эти перестановки эффективнее всего найти? Это сообщение отредактировал(а) Pawl - 11.2.2014, 07:04 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Сформулируй ТОЧНО понятие "перестановка". Могут ли элементы перемещаться по всей матрице, или например только в пределах строки? От этого зависит ответ.
Тогда первое, что приходит в голову - это (n*n!)/П((ni*ni)!) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Согласен, не уточнил. По всей матрице Это сообщение отредактировал(а) Pawl - 11.2.2014, 08:21 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
UPD: погорячился, на автомате залепил второе умножение. Правильно так: (n*n)!/П(ni!) Т.е. для приведённой выше матрицы это будет 9! / (3! * 3! * 3!) = 1680 Это сообщение отредактировал(а) Akina - 11.2.2014, 08:34 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Спасибо. А с реализацией алогритма не поможете?
-------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
А что не получается? я даже представить не могу, где тут можно найти проблему (если не считать переполнения типа или потери точности - но это уже не алгоритм)...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Ну, как полный перебор сделать я представляю, ваша подсказка с разворачиванием в 1-мерный массив меня навела на мысль. Моя идея в следующем: развернуть массив, сохранить его в некий объект-список, сделать одну перестановку, сравнить полученный массив с теми, что есть в списке, если такого нет, сохранить его, сделать новую перестановку. Затем все сохраненные массивы снова свернуть и вывести на печать. Но сложность полного перебора тут таки будет (n*n)! В то время, как реально, как вы сказали, должна быть (n*n)!/П(ni!). Вот я и хочу узнать, может, это можно как-нибудь оптимизировать? -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Так... забыли, что написано выше. Сформулируй задачу. ПОЛНОСТЬЮ. От начала до конца. Без малейших как недоговорённостей, так и излишков.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
имеется массв nxn: (1 2 3 4 ... n) (1 2 3 4 ... n) (1 2 3 4 ... n) (1 2 3 4 ... n) ... (1 2 3 4 ... n) Определить все возможные перестановки (permutations) элементов в нем. Один из вариантов: (1 3 3 4 ... n) (1 2 2 4 ... n) (1 2 3 4 ... n) (1 2 3 4 ... n) ... (1 2 3 4 ... n) Это сообщение отредактировал(а) Pawl - 12.2.2014, 19:14 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Блин... тебе что, надо сгенерировать все перестановки, что ли? Тогда просто строй рекурсивную процедуру заполнения пустого массива элементами из набора неиспользованных... в неё передаётся текущий заполненный частично массив, текущий указатель заполнения, список нераспределённых элементов (значение - количество).Если список пуст - выводишь очередную генерацию и выход, иначе ставишь на очередное место каждый из доступных элементов и вызываешь себя, скорректировав перердаваемые параметры.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
А как избавиться от генерации одинаковых массивов? Вот, к примеру, единицы из первой и второй строки поменяются, генерация - новая, а массив такой, как был. Я сразу спрашивал, есть ли алгоритм, оптимальнее полного перебора? -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Вы не разобрались в описании. Алгоритм не генерирует дубликатов. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Возможно... Что же, буду разбираться. Пока тему закрываю. -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |