我对可以用来生成给定集合的所有潜在排列的不同技术/方法的比较感兴趣。
您可以在性能,特定分布和简单性之间进行选择。我所说的特定分布是指您是否关心输出的某些特定顺序,例如字典顺序。
据我所知,性能最佳的算法是Steinhaus algorithm。从产生一个置换只需要恒定数量的处理器指令的意义上说,最佳的是乘数常数(不计算打印输出所必需的指令,这并不总是必需的)。
还有一种非常简单的算法,它可以按字典顺序生成排列,您可能可以自己将其重新创建为递归过程,其性能为O(n.log(n).log(n) )
我发现一个非常好的resource。希望它能对您有所帮助。
这个问题已经被问及回答了(实际上很多次:):