Этот метод генерации всех перестановок не очень хорош по сравнению со стандартными известными методами.
Скажем, у вас было n предметов и M = n! Перестановки.
Ожидается, что этот метод генерации генерирует M * lnM перестановок, прежде чем обнаружит все M.
(См. Этот ответ для возможного объяснения: Программирование жемчужин - алгоритм случайного выбора )
Кроме того, что бы была хэш-функция? Для разумной хэш-функции нам, возможно, придется начать работу с очень большими целочисленными проблемами довольно скоро (наверняка, при любом n> 50, не помню эту точную точку отсечения).
Этот метод также использует много памяти (хеш-таблица всех перестановок).
Даже если предположить, что хеш идеален, этот метод будет принимать ожидаемые операции Омега (n M logM) и гарантированное пространство Омега (нМ), в то время как стандартные известные методы могут делать это в O (M) время и O (n) пространство.
В качестве отправной точки я предлагаю прочитать: Систематическое генерирование всех перестановок , которое, как полагают, является O (нМ) временем и O (n) пространством и все еще намного лучше, чем этот метод.
Обратите внимание, что если нужно сгенерировать все перестановки, любой алгоритм обязательно предпримет шаги Омега (М), и поэтому метод, на который я ссылаюсь выше, является оптимальным!