我想生成所有有序对(a,b)的排列,其中a!= b,a,b是集合S的元素(假设S:= {1..k}),但是要排除S中个别元素的排列。
例如,令k = 2,则可能的有序对为(1,2),(2,1), 共有2个可能的顺序:
- (1,2),(2,1) - (2,1),(1,2)
但这些实际上是在{1->2,2->1}置换映射下的重复。
当k = 3时,将有6个可能的有序对,给出6!个序列(包括重复项)。但是,只有3!= k种可能的排列,需要的唯一序列数量为5!,并且可以通过仅考虑以对(1,2)开头的序列来轻松生成。
通常情况下,将有k *(k-1)个对,给出[k *(k-1)]!个序列(包括重复项),并且将有k!个排列,因此最终会得到[k *(k-1)]!/ k!个序列。
我只打算使用小的k值,但我想知道是否有任何好的方法来生成这些序列。我相当确定这是过滤唯一序列[允许重复元素]的特定情况,受到这些序列中可能元素的置换的影响,但也许在我寻找的内容中有一些特殊之处,比暴力生成所有可能序列然后过滤更容易。
例如,令k = 2,则可能的有序对为(1,2),(2,1), 共有2个可能的顺序:
- (1,2),(2,1) - (2,1),(1,2)
但这些实际上是在{1->2,2->1}置换映射下的重复。
当k = 3时,将有6个可能的有序对,给出6!个序列(包括重复项)。但是,只有3!= k种可能的排列,需要的唯一序列数量为5!,并且可以通过仅考虑以对(1,2)开头的序列来轻松生成。
通常情况下,将有k *(k-1)个对,给出[k *(k-1)]!个序列(包括重复项),并且将有k!个排列,因此最终会得到[k *(k-1)]!/ k!个序列。
我只打算使用小的k值,但我想知道是否有任何好的方法来生成这些序列。我相当确定这是过滤唯一序列[允许重复元素]的特定情况,受到这些序列中可能元素的置换的影响,但也许在我寻找的内容中有一些特殊之处,比暴力生成所有可能序列然后过滤更容易。