Algoritmo para listar todas as permutações exclusivas de números contém duplicatas

O problema é: dada uma coleção de números que podem conter duplicatas, retorne todas as permutações exclusivas.

A maneira ingênua é usar um conjunto (em C ++) para manter as permutações. Isso levaO(n! Log de log (n!)) Tempo. Existe melhor solução?