c++ 无法理解使用此自定义方案压缩和解压缩整数排序列表的SO答案[重复]

olqngx59  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(97)

此问题在此处已有答案

Compressing a vector of positive integers (int32) that have a specific order(4个答案)
10天前关闭。
我偶然发现了this answer,我不确定我是否理解它的工作原理。具体来说,大部分原始值都是使用以下代码编码的:

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


但是,我不确定我是否理解这是怎么可能的。如果我们用一些随机数据运行这个,例如:
第一个月
那么我们就有:

编码

k   d[1]     Code
-----------------
1 * 8  = 8   8
2 * 18 = 36  44
6 * 36 = 216 260


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

ttisahbt

ttisahbt1#

它有助于阅读整个答案。特别是,在我的答案开始的假设,来自OP:
每个值必须小于其索引,索引从1开始
你的例子不符合这个限制。

相关问题