随机排序非重复增量整数的压缩

问题描述 投票:0回答:1

我有一组从 0 到 99 的 100 个整数,按随机顺序排列。该范围内的每个数字恰好出现一次。我正在寻找最有效的无损压缩算法来压缩这些数据,同时保持高效解压缩的能力?

我知道压缩随机数在理论上是不可能的,但我想知道这种情况是否可能,因为每个数字只出现一次,而您基本上只需要以某种方式压缩数字的顺序...请不要严格来说,我不是这个领域的专家。另外,任何有关 python 实现的提示将不胜感激! :)

提前致谢。

python algorithm math set compression
1个回答
0
投票

使用排列索引作为压缩形式:

from random import shuffle
from more_itertools import permutation_index, nth_permutation

n = 100
r = range(n)

for _ in range(10):
    a = list(r)
    shuffle(a)
    
    compressed = permutation_index(a, r).to_bytes()
    decompressed = list(nth_permutation(r, n, int.from_bytes(compressed)))
    print(len(compressed), decompressed == a)
© www.soinside.com 2019 - 2024. All rights reserved.