![]() |
|
|
![]()
|
|
| tt0100 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2011 Репутация: нет Всего: нет |
Нужен быстрый алгоритм поиска всех возможных вариантов значений нескольких переменных без повторений.
Есть m переменных. Каждая из которых может принимать некоторые значения из диапазона 1..n. Например: v1 {4,5,6,7} v2 {1,2,3,4,7} v3 {1,2,3,4,5,6,7} v4 {1} v5 {1,2,3,4,5,6,7} v6 {1,7} нужен алгоритм который переберет все варианты так что варианты одинаковы если отличаются только порядком переменных. стандартно если ограничений нет то можно через вложенные циклы for(i1=1;i1<=(7-(колво переменных-1));i1++){ for(i2=i1+1;i2<=(7-(колво переменных-1)+1);i2++){ и тд. но когда есть ограничения это не работает. а делать полный перебор это n^m это слишком много лишних операций. хотелось бы что-нибудь попроще если есть спс |
|||
|
||||
| Silent |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Мне сейчас лень расписывать, что и как делать, проще код написать:
входной файл input.txt
первое число - количество множеств _count, далее в _count строках первое число - количество чисел в i-ом множестве и сами числа алгоритм
в итоге для данных множеств ответ
|
||||||
|
|||||||
| tt0100 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2011 Репутация: нет Всего: нет |
ну вроде как очевидно что неправильно. т.к. из v4 и v6 следует что в результате всегда должно быть 1 и 7. но спасибо за оперативность. неожидал
|
|||
|
||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
не совсем понял, что вы имели ввиду... результат неправильный или отсечение мало? |
|||
|
||||
| tt0100 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2011 Репутация: нет Всего: нет |
||||
|
||||
| tt0100 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2011 Репутация: нет Всего: нет |
Silent
все вродебы понятно как решать. там у тебя в v нужно хранить именно матрицу 0/1 есть значение в ограничении или нет. ( sort(&v[0], &v[n], &cmp1) исключает выпадающие значения но у меня их не будет). и исходя из этой матрицы выбирать значение которое исключаем первым - то которое реже всего встречается из оставшихся. и проверять исключение значения приводит к исключению переменной или нет. по идее это значит что на каждом шагу надо производить поиск минимального элемента. не знаю на сколько это быстро. ну в смысле понятно что за линейное время но вопрос в накладных расходах на каждый шаг операции |
|||
|
||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
а чем они плохи, почему их не должно быть? вполне себе обычные варианты Количество операций меньше C(n,m), поскольку алгоритм пытается собрать возрастающую последовательность v - это линейный список с элементами множеств, никаких "0/1 матриц значений ограничений" там нет. Попробуйте еще раз разобраться с кодом. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |