Re[4]: Алгоритм перебора
От: deniok Россия  
Дата: 23.06.07 08:16
Оценка:
Здравствуйте, Vladimir E., Вы писали:

VE>Пишу я на паскале, а по ключевым словам я уже говорил что пробовал искать, там либо чистый готовый код, либо ссылки битые, либо какие-то основы комбинаторики, где только говорится как количество вариантов подсчитать, а не как сделать оптимальный алгоритм чтобы он перебирал все значения, причём без повторений.


В каком смысле оптимальный? У тебя в любом случае ответ даёт "комбинаторный взрыв" по использованию памяти. Поэтому C++-ый вариант c next_permutation часто удобнее всего. Если действительно необходимо получить все перестановки одновременно — прогоняешь в цикле next_permutation до тех пор, пока он может выполнить следующую перестановку, и на каждом шаге копируешь очередную перестановку в результирующий контейнер контейнеров:

while ( next_permutation(start, end) )
{
   copy(start, end, resContIt) ;
}

(Понятно, что исходно контейнер [start,end) должен быть отсортирован.)


А сам next_permutation реализовать не очень сложно, см., например, здесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.