我有一组从 0 到 99 的 100 个整数,按随机顺序排列。该范围内的每个数字恰好出现一次。我正在寻找最有效的无损压缩算法来压缩这些数据,同时保持高效解压缩的能力?
我知道压缩随机数在理论上是不可能的,但我想知道这种情况是否可能,因为每个数字只出现一次,而您基本上只需要以某种方式压缩数字的顺序...请不要严格来说,我不是这个领域的专家。另外,任何有关 python 实现的提示将不胜感激! :)
提前致谢。
使用排列索引作为压缩形式:
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)