考虑这个排列是怎样生成的。转述一下题意,可以发现,popcount(Pi⊕Pi+1mod2n)=K,也即全集msk=2N−1的一个大小为K的子集。
由于这是一个环排列,我们不妨令P0=0。这样一来,Pi=⨁j=1iSj,∣Sj∣=K。结合上文可知,这是一个相邻元素二进制位恰相差K位的格雷码问题。有K=1时,满足条件的Sj恰有N个,也就是N位格雷码。
考虑推广。我们发现,如果按照类格雷码的方式生成排列,则所有的Sj应构成异或空间,其大小应当恰为2N,并且由线性空间知识可以得到,该线性空间的秩(基的大小)应当恰为N。这恰好符合N位格雷码的构造。因此,只要满足上述条件,就一定能够生成符合题意的排列。
可以证明,除了2∣K∨(K=N∧N>1)以外,总是有满足条件的线性空间生成的。
下述解法的时间复杂度O((KN)+2N)。 (更多…)
More