Варіант 0: Permuting In Place (1995) від Віри Е. Фіх, Дж. Іна Мунро, Патрісіо В. Поблете часу O ( log 2 n ) простір.O(nlogn)O(log2n)
Варіант 1: Обдурити, стиснувши перестановку до лаконічної структури даних, див. Munro http://www.itu.dk/people/ssrao/icalp03-a.pdf .
Варіант 2: Використовуйте розклад основного циклу, щоб зберігати перманентну лаконічно і використовувати цей додатковий простір для обману http://oeis.org/A186202
Варіант 3: Відстежуйте найбільший індекс кожного маніпульованого циклу. Для кожної ітерації використовуйте найбільший невидимий індекс, щоб перемістити все в своєму циклі по одному. Якщо він потрапляє на побачений індекс, скасуйте все, що працює, тому що циклом вже маніпулювали. час, O ( # циклів ∗ log n ) простір.O(n2)O(#cycles∗logn)
Варіант 4: Відслідковуйте найбільший індекс кожного маніпульованого циклу, але виконайте їх лише партіями різної тривалості циклу. Для кожної ітерації використовуйте найбільший невидимий індекс, щоб переміщувати все в своєму циклі по одному. Якщо він потрапляє на побачений індекс, скасуйте все, що працює, тому що цикл thae вже маніпулюється час, O ( ( # циклів _ з _ же _ розмір ) * журнал п ) простір.O(n2∗distinct_cycle_lengths)O((#cycles_with_same_size)∗logn)
Варіант 5: Із того ж паперу Манро, як і варіант 0, для обертати цикл p ( i ), якщо i - найбільший показник у цьому циклі. O ( n 2 ) час і O ( log n ) простір.i=1..np(i)iO(n2)O(logn)