此问题在此处已有答案:
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
型
不过,我不确定如何使用建议的程序恢复原始数据。
我错过什么了吗?
1条答案
按热度按时间ttisahbt1#
它有助于阅读整个答案。特别是,在我的答案开始的假设,来自OP:
每个值必须小于其索引,索引从1开始
你的例子不符合这个限制。