Страниц: 1 2 [3] 4 5 ... 7
  Печать  
Автор Тема: Уникальные перестановки  (Прочитано 35017 раз)
0 Пользователей и 1 Гость смотрят эту тему.

Вот эти 12 перестановок из чисел 1,2,3,4 назовём уникальными в таком смысле: ни в каких двух перестановках в одинаковых позициях нет одинаковой пары чисел:

Код:
1 2 3 4
1 3 4 2
1 4 2 3
2 1 4 3
2 3 1 4
2 4 3 1
3 1 2 4
3 2 4 1
3 4 1 2
4 1 3 2
4 2 1 3
4 3 2 1
Например, в первой перестановке в первой и второй позиции имеем пару чисел 1,2; больше ни в какой престановке в этих позициях нет такой пары чисел.

Задача такая: составить 56 уникальных перестановок из чисел 1,2,3,4,5,6,7,8 (ещё 72 перестановки из чисел 1,2,3,...,9 и 240 перестановок из чисел 1,2,3,...,16).

Вот начала писать перестановки из чисел 1,2,...,8. Первые семь штук:

Код:
1,2,3,4,5,6,7,8
1,3,4,5,6,7,8,2
1,4,5,6,7,8,2,3
1,5,6,7,8,2,3,4
1,6,7,8,2,3,4,5
1,7,8,2,3,4,5,6
1,8,2,3,4,5,6,7

Дальше не знаю, как писать.

По-хорошему, конечно, надо программку написать. Но для 16 чисел, наверное, очень долго работать будет  Sad
Слишком много перестановок. Может быть, тут какая-то хорошая есть закономерность, или хорошая оптимизирующая тупой перебор идея.

Помогите, пожалуйста  Помощь
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #30 : Июнь 10, 2012, 14:33:31 �

Zhekas
я что-то пока не поняла логику программы.

Вот запустила я программу с параметром 6. Она первые 30 комбинаций сразу нашла.
Что она делает дальше? Целый час уже работает и всё на одном месте. Неужели она так долго ищет 31-ую комбинацию? Что-то тут не так... Тут перебор-то вроде не очень большой.

Я делала программку для добавления только одной комбинации. Беру набор из M комбинаций и по программе пытаюсь добавить (M+1)-ую комбинацию. Так программа моментально это определяет: можно добавить или нельзя.

А ваша программа целый час думала над 31-ой комбинацией и так ничего и не придумала.

Нет ли у вас где-то ошибки? Может, где-то в циклах ошиблись, не туда сделали переход. Это часто у меня бывает. И тогда программа просто зацикливается.

Короче, я пока прервала программу. Тут ничего не светит, не только 32-ой, но даже и 31-комбинации не находит программа.
Последнее редактирование: Июнь 10, 2012, 14:36:15 от square Записан

//текст доступен после регистрации//
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #31 : Июнь 10, 2012, 14:49:03 �

Вот смотрите пример.
Запускаю вашу программу с параметром 1. Она мгновенно выдаёт 30 комбинаций:

Pervaia stroka:
1 1 1 1 1 1
Maximum=30
1 1 1 1 1 1
1 2 2 2 2 2
1 3 3 3 3 3
1 4 4 4 4 4
1 5 5 5 5 5
1 6 6 6 6 6
2 1 2 3 4 5
2 2 1 4 3 6
2 3 4 5 6 1
2 4 3 6 5 2
2 5 6 1 2 3
2 6 5 2 1 4
3 1 3 5 2 4
3 2 4 6 1 3
3 3 5 1 4 6
3 4 6 2 3 5
3 5 1 3 6 2
3 6 2 4 5 1
4 1 4 2 5 6
4 2 3 1 6 5
4 3 6 4 1 2
4 4 5 3 2 1
4 5 2 6 3 4
4 6 1 5 4 3
5 1 5 4 6 3
5 2 6 3 5 4
5 3 1 6 2 5
5 4 2 5 1 6
5 5 3 2 4 1
5 6 4 1 3 2

Дальше беру эти 30 комбинаций и скармливаю своей программе, она моментально отрабатывает и говорит, что добавить 31-ую комбинацию тут нельзя.

Всё! Над чем думает ваша программа целый час?

А может, она тоже уже всё обдумала и решила, но тогда как-то должно это показаться в окне программы, что она закончила работу. А то впечатление такое, что она всё работает, работает...
Записан

//текст доступен после регистрации//
zhekas
Гений-Говорун
*
Offline Offline

Сообщений: 1035

СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487



Просмотр профиля Email
Ответ #32 : Июнь 10, 2012, 15:05:28 �

Я поставил значение max=29. Программа перебирает все варианты с нуля. Как только строк  стало 30 она присвоила max=30 и вывела эти строки. Дальше, следующую строку она не нашла и стала перебирать следующие комбинации. А так как max=30 то новые комбинации из 30 строк она не выводит. А будет выводить теперь только если появится 31 строка и больше
Записан
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #33 : Июнь 10, 2012, 15:41:12 �

А, теперь понятно.
То есть она перебирает дальше.
Ну, какой-нибудь индикатор вывели бы, чтобы видеть, что она перебирает. А так ничего не понятно, что она там делает, или, может, просто висит.

Получается, что мне с 31-ой комбинацией в самом первом вашем наборе крупно повезло Smiley
Записан

//текст доступен после регистрации//
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #34 : Июнь 11, 2012, 04:58:22 �

Zhekas
оставим пока комбинации из чисел 1,2,3,4,5,6.
Что-то программа у меня не выдала ни одного набора даже из 31 комбинации.

Подумаем о комбинициях из чисел 1,2,3,...,10.

Я посмотрела на набор из 30 комбинаций, полученный по вашей программе (чуть выше он выложен) с первой строкой 1,1,1,1,1,1.

По-моему, обалденная закономерность! Ровно 5 групп по 6 штук в каждой группе, первая группа начинается с числа 1, вторая - с числа 2 и т.д.

У меня есть предположение, что аналогичную группу комбинаций можно получить из чисел 1,2,3,...,10. Будет 9 групп по 10 штук в каждой, первая группа будет начинаться с числа 1, вторая - с числа 2. и т.д.

Ну, например, вот первая группа, пишу по аналогии с первой группой комбинаций из чисел 1,2,3,4,5,6:

Код:
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 3 3 3 3 3 3 3 3 3
1 4 4 4 4 4 4 4 4 4
1 5 5 5 5 5 5 5 5 5
1 6 6 6 6 6 6 6 6 6
1 7 7 7 7 7 7 7 7 7
1 8 8 8 8 8 8 8 8 8
1 9 9 9 9 9 9 9 9 9
1 10 10 10 10 10 10 10 10 10

Если вам не трудно, проверьте, пожалуйста, мою гипотезу.
Получится ли набор из 90 комбинаций?
Очень интересно!

У вас программа-то уже готовая, несложно проверить.





Последнее редактирование: Июнь 11, 2012, 05:02:58 от square Записан

//текст доступен после регистрации//
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #35 : Июнь 11, 2012, 05:51:53 �

Пытаюсь составить вторую группу комбинаций по аналогии, пока вот что получилось:

Код:
2 1 2 3 4 5 6 7 8 9
2 2 x x x x x x x 10
2 3 x x x x x x 10 1
2 4 x x x x x 10 x 2
2 5 x x x x 10 x x 3
2 6 x x x 10 x x x 4
2 7 x x 10 x x x x 5
2 8 x 10 x x x x x 6
2 9 10 x x x x x x 7
2 10 x x x x x x x 8
Похоже? Smiley

Кто заполнит группу?

Спасибо! (авансом Smiley)
Последнее редактирование: Июнь 11, 2012, 05:54:43 от square Записан

//текст доступен после регистрации//
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #36 : Июнь 11, 2012, 10:41:54 �

Написала программку для добавления к имеющемуся набору по одной комбинации. Удалось получить такой набор комбинаций:

Код:
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 3 3 3 3 3 3 3 3 3
1 4 4 4 4 4 4 4 4 4
1 5 5 5 5 5 5 5 5 5
1 6 6 6 6 6 6 6 6 6
1 7 7 7 7 7 7 7 7 7
1 8 8 8 8 8 8 8 8 8
1 9 9 9 9 9 9 9 9 9
1 10 10 10 10 10 10 10 10 10
2 1 2 3 4 5 6 7 8 9
2 2 1 4 3 6 5 8 7 10
2 3 4 5 6 7 8 9 10 1
2 4 3 6 5 8 7 10 9 2
2 5 6 7 8 9 10 1 4 3
2 6 5 8 7 10 9 3 1 4
2 7 8 9 10 1 3 4 6 5
2 8 7 10 9 4 1 5 3 6
2 9 10 1 2 3 4 6 5 7

Увы, плохо! Во второй группе (комбинации начинаются с числа 2) не удалось добавить ещё одну комбинацию, их должно быть 10 штук.

Всё неправильно тогда.
Надо писать программу полного перебора.

Почти уверена, что аналогия с комбинациями из чисел 1,2,3,4,5,6 имеет место.

И помощник мой пропал  Sad
 Помощь

Последнее редактирование: Июнь 11, 2012, 10:44:08 от square Записан

//текст доступен после регистрации//
zhekas
Гений-Говорун
*
Offline Offline

Сообщений: 1035

СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487



Просмотр профиля Email
Ответ #37 : Июнь 11, 2012, 10:58:40 �

С шестёрками всё глухо. Почти за сутки первая строка не изменила ни одного числа. А для того чтобы сделать полный перебор спараметром нужно 6^3 комбинаций первой строки.
Последнее редактирование: Июнь 11, 2012, 11:02:56 от zhekas Записан
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #38 : Июнь 11, 2012, 11:17:32 �

Бросьте шестёрки!

Посмотрите, пожалуйста, на задачку про числа 1,2,3,...,10.
Мне кажется, что набор из 90 комбинаций из этих чисел составится мгновенно, так же, как составился набор из 30 комбинаций чисел 1,2,3,4,5,6.
У вас программа, как я понимаю, есть для n=10, вы писали её для поиска уникальных перестановок.
Надо теперь только разрешить повторение чисел в комбинациях.

Если будет долго работать программа, шлите её мне, я покручу.
Последнее редактирование: Июнь 11, 2012, 11:19:38 от square Записан

//текст доступен после регистрации//
zhekas
Гений-Говорун
*
Offline Offline

Сообщений: 1035

СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487



Просмотр профиля Email
Ответ #39 : Июнь 11, 2012, 11:42:04 �

а толку крутить. Она на 20-й строке уже тупит.
Записан
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #40 : Июнь 11, 2012, 11:44:26 �

А первые 19 комбинаций покажите, пожалуйста.

Я вот по своей программке тоже пыталась вторую группу сделать, 9 комбинаций в ней получилось, а десятой нету! Не добавляется.
Записан

//текст доступен после регистрации//
zhekas
Гений-Говорун
*
Offline Offline

Сообщений: 1035

СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487



Просмотр профиля Email
Ответ #41 : Июнь 11, 2012, 11:48:32 �

1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2
1 3 3 3 3 3 3 3 3 3
1 4 4 4 4 4 4 4 4 4
1 5 5 5 5 5 5 5 5 5
1 6 6 6 6 6 6 6 6 6
1 7 7 7 7 7 7 7 7 7
1 8 8 8 8 8 8 8 8 8
1 9 9 9 9 9 9 9 9 9
1 10 10 10 10 10 10 10 10 10
2 1 2 3 4 5 6 7 8 9
2 2 1 4 3 6 5 8 7 10
2 3 4 1 2 7 8 5 9 6
2 4 3 2 1 8 7 6 10 5
2 5 6 7 8 1 2 9 3 4
2 6 5 8 7 2 1 10 4 3
2 7 8 5 6 9 10 3 1 2
2 8 7 9 10 3 4 2 5 1
2 9 10 6 5 4 3 1 2 7
Записан
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #42 : Июнь 11, 2012, 11:58:30 �

Нет, у меня не такая вторая группа получилась, а первая такая же.

Но, чёрт подери, должна быть аналогия!

Может, как-нибудь без программы в эту аналогию проникнуть?

Всё равно пришлите программу, попробую покрутить. Только, пожалуйста, сделайте вывод на экран чего-нибудь перебираемого, чтобы можно было видеть динамику работы программы.
Последнее редактирование: Июнь 11, 2012, 12:02:00 от square Записан

//текст доступен после регистрации//
zhekas
Гений-Говорун
*
Offline Offline

Сообщений: 1035

СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487



Просмотр профиля Email
Ответ #43 : Июнь 11, 2012, 12:01:16 �

Для аналогии. Вот вам для n=8
Показать скрытый текст

Эти пользователи сказали вам СПАСИБО :

square

За это сообщение 1 пользователь сказал спасибо!
Записан
square
Свой человек
***
Offline Offline

Сообщений: 333

СПАСИБО
-вы поблагодарили: 22
-вас поблагодарили: 14



Просмотр профиля Email
Ответ #44 : Июнь 11, 2012, 12:04:14 �

O!!!
Спасибо. Буду думать.

Вот, значит, для n=8 быстро получилось.
А для n=10 тупит.
А для n=9 что имеем? Для аналогии пригодится Smiley
Записан

//текст доступен после регистрации//
Страниц: 1 2 [3] 4 5 ... 7
  Печать  
 
Перейти в: