我想将长度N
的排列保存到少于N
个字节中。长度N
的排列包含元素1,2,3,....,N
。
排列具有以下首选项:
只有1个周期
可以通过DI序列和等级来描述 permutation ranking with DI sequence
其他阅读:Rank and unrank permutation with special properties
是否有一种方法可以组合这些首选项以最小化可能的排列排名?还是有更多的首选项可以用来描述排列,而字节数却比长度长呢?
我的想法是先指定排列的一个子集,然后对其进行排名,但是我无法将偏好组合在一起以创建一个通过偏好定义的子集。
答案 0 :(得分:1)
一般来说,不是。
只有一个周期的长度n
的排列与长度n-1
的排列成1-1对应。
强度是一个正整数,不能超过n^2
。
可能的位串数为2^(n-1)
。
根据鸽子原则,对于某些位串和某些强度,必须至少有(n-1)! / (2^(n-1) n^2) = n! / (2^(n-1) n^3)
。
从Stirling's approximation我们可以看到
log2( n! / (2^(n-1) n^3) )
= n log2(n) - n log2(e) + O(log2(n)) - (n-1) - 3 log2(n)
= n log2(n) - n (log2(e) + 1) - O(log2(n))
= n log2(n) + O(n)
这告诉我们,即使在您的条件下,所需位数也比线性增长更快。因此,对于足够大的n
,您将需要超过n
个字节的数据来指定单个排列。