提问人:dearn44 提问时间:11/9/2023 最后编辑:HolyBlackCatdearn44 更新时间:11/10/2023 访问量:78
无法理解使用此自定义方案压缩和解压缩整数排序列表的 SO 答案 [重复]
Not able to understand an SO answer on compressing and decompressing a sorted list of integers using this custom scheme [duplicate]
问:
我偶然发现了这个答案,我不确定我是否理解它是如何工作的。具体而言,大部分原始值使用以下代码进行编码:
// Code num values.
uint64_t code = 0;
size_t k = 1;
do {
code += k * data[i++];
k *= i;
} while (--num);
然后声称下面的代码将返回原始值:
// Extract num values from code.
do {
i++;
data.push_back(code % i);
code /= i;
} while (--num);
但是,我不确定我是否理解这怎么可能。如果我们使用一些随机数据运行它,例如:
d = [8, 18, 36]
那么我们将有:
编码
k d[1] Code
-----------------
1 * 8 = 8 8
2 * 18 = 36 44
6 * 36 = 216 260
不过,我不确定如何使用建议的程序取回原始数据。
我错过了什么吗?
答:
4赞
Mark Adler
11/9/2023
#1
阅读整个答案会有所帮助。特别是,我回答开始时的假设,来自 OP:
每个值必须小于其索引,索引从 1
您的示例不符合该约束。
上一个:如何提取压缩包?
评论