Изменения

Перейти к: навигация, поиск

Участник:ZeRoGerc

820 байт добавлено, 21:31, 6 декабря 2014
Нет описания правки
==Асимптотика==
Поговорим об асиптотике. Снова разобьём наши перестановки на блоки по <tex>n</tex>элементов. Немного модифицируем алгоритм. Заметим, что в каждом блоке нам нужно искать максимальный элемент только один раз. В остальных случаях этим элементом будет <tex>n</tex>. Следовательно , менять направление стрелок нужно тоже только один раз(в остальных случаях менять направления не нужно, так как <tex>n</tex> - подвижный элемент, а менять направление стрелок нужно только у бóльших элементов). Следовательно , блок выполняется за <tex>O(n) + O(n) + O(n) = O(n)</tex>. Всего блоков <tex> -\:(n - 1)!</tex>. Общая асимптотика <tex>O(n) * (n - 1)! = O(n!)</tex>. ==Сравнение с рекурсивным алгоритмом==Главным приемуществом алгоритма Джонсона-Троттера является то, что нам не нужно хранить все предыдущие перестановки (из <tex>n - 1</tex> элемента), а только текущую. Следовательно, этот алгоритм потребляет только <tex>O(n)</tex> памяти. Также, из-за нерекурсивности этот алгоритм работает быстрее. Это можно строго доказать, но доказательство довольно громозодкое и приводить его мы здесь не будем. ==Коды грея==
130
правок

Навигация