Участник:ZeRoGerc
Версия от 23:15, 27 ноября 2014; ZeRoGerc (обсуждение | вклад)
Алгоритм Джонсона-Троттера(англ. Johnson-Trotter algorithm) - алгоритм генерации всех перестановок из элементов. Причём любая перестановка отличаются от предыдущей транспозицией двух соседних элементов.
Идея
Сопоставим каждому элементу перестановки направление . Будем указывать направление при помощи стрелок ← ("влево") или →("вправо"). Назовём элемент подвижным, если по направлению стелки стоит элемент меньше его. Например для ←, →, ←, →, ←, подвижными являются элементы 3 и 5. На каждой итерации алгоритма будем искать наибольший подвижный элемент и менять местами с элементом, который стоит по направлению стрелки. После чего поменяем направление стрелок на противоположное у всех элементов больших текущего.Изначально ←, ... ,←
Пример работы алгоритма для n = 3
- ←, ←, ←
- ←, ←, ←
- ←, ←, ←
- →, ←, ←
- ←, →, ←
- ←, ←, →