保存置换的字节数少于置换长度

时间:2019-06-21 19:10:39

标签: arrays algorithm compression permutation ranking

我想将长度N的排列保存到少于N个字节中。长度N的排列包含元素1,2,3,....,N

排列具有以下首选项:

其他阅读:Rank and unrank permutation with special properties

是否有一种方法可以组合这些首选项以最小化可能的排列排名?还是有更多的首选项可以用来描述排列,而字节数却比长度长呢?

我的想法是先指定排列的一个子集,然后对其进行排名,但是我无法将偏好组合在一起以创建一个通过偏好定义的子集。

1 个答案:

答案 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个字节的数据来指定单个排列。