Algorithme pour la liste de tous unique de permutations des nombres contenir des doublons

Le problème est le suivant: étant Donné un ensemble de chiffres qui pourraient contenir des doublons, le retour de tous unique de permutations.

Le naïf façon est d'utiliser un ensemble (en C++) pour contenir les permutations. Cela prend O(n! × log(n!)) temps. Est-il la meilleure solution?

Puisqu'il y a n! permutations de n distincts entiers, vous ne pouvez pas faire mieux que O(n!) si vous êtes tenu de les énumérer. Notez également que la présence de doublons est pas pertinent étant donné que le processus de suppression de doublons prend une quantité négligeable de temps par rapport à l'énumération des permutations.
Oui, je suis en train d'essayer de réduire le temps de la complexité à O(n!).
Sons devoirs-ey.
1. next_permutation (en C++ STL) visites chaque permutation exactement une fois, même quand il y a des doublons. 2. L'espace exigence seul est O(nn!), pas de O(n!). 3. En insérant l'ensemble des n! les permutations dans un STL jeu de prendre en O(n! log(n!)) = O(nn!*logn)
Je crois que le point de l'exercice est de mettre en œuvre next_permutation. Aussi, je devrait peut-être se sont qualifiés dont je parlais du temps de la complexité seule, et je voudrais juste de les stocker dans une liste (puisque la prochaine perm algo déjà exclut les doublons).

OriginalL'auteur stackunderflow | 2012-07-11