无法理解有关使用此自定义方案压缩和解压缩整数排序列表的SO答案

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

我偶然发现了this问题,我不确定我是否理解它是如何工作的。具体来说,大部分原始值都是使用以下代码进行编码的:

// 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

我不确定如何使用建议的程序取回原始数据。我错过了什么吗?

c++ compression
1个回答
0
投票

阅读整个答案很有帮助。特别是我的答案开头的假设,来自OP:

每个值都必须小于其索引,索引从 1

您的示例不满足该限制。

© www.soinside.com 2019 - 2024. All rights reserved.