Вариант 0: Перестановка на месте (1995) Фейт Э. Фич, Дж. Ян Мунро, Патрисио В. Поблете время O ( log 2 n ) пространство.O ( n logн )O ( журнал2н )
Вариант 1. Обман, сжимая вашу перестановку в краткую структуру данных, см. Munro http://www.itu.dk/people/ssrao/icalp03-a.pdf .
Вариант 2. Используйте разложение по простому циклу для краткого хранения перми и используйте это дополнительное место для обмана http://oeis.org/A186202
Вариант 3: отслеживание наибольшего индекса каждого цикла манипулирования. Для каждой итерации используйте самый большой невидимый индекс, чтобы переместить все в своем цикле на единицу. Если он попадает в видимый индекс, отмените всю эту работу, потому что цикл уже был изменен. время, O ( # циклов * log n ) пространство.O ( n2)O ( # циклов * логн )
Вариант 4. Отслеживайте наибольший индекс каждого манипулируемого цикла, но делайте это только партиями с различной длиной цикла. Для каждой итерации используйте самый большой невидимый индекс, чтобы переместить все в цикле на единицу. Если он попадает в видимый индекс, отмените всю эту работу, потому что цикл уже был изменен. времени, O ( ( # циклов _ с _ одинаковым _ размером ) ∗ log n ) пробел.O ( n2* Отчетливый _ цикл _ длины )O ( ( # циклов _ с _ одинаковым _ размером ) ∗ logн )
Вариант 5: из той же бумаги Munro, что и вариант 0, для поверните цикл p ( i ), если i - самый большой индекс в этом цикле. O ( n 2 ) время и O ( log n ) пространство.я = 1 . , Nр ( я )яO ( n2)O ( журналн )