这是我的问题。我有一组 20 个对象作为数组存储在内存中。我想存储第二条数据,用于定义要显示的对象的顺序。
存储顺序的最简单方法是作为一个包含 20 个无符号整数的数组,每个整数为 5 位(又名 0-31)。对象在输出列表中的位置将由存储在该数组中的数字定义,索引与数组中的对象相同。
但是.. 我从统计上知道只有20个! (那是 20 阶乘),排列这些对象的方法。 这可以存储在 62 位中,因为 2^62 > 20!
我目前使用 100 位来存储相同的信息。
所以我的问题是:是否有一种节省空间的方式将 ORDER 存储为位序列?
我也有一些附加限制。这将在嵌入式设备上运行,所以我不能使用任何巨大的数组或高级数学函数。我需要一个简单的迭代方法。
编辑:澄清为什么这是必要的。例如,对象是图片,它们存储在 ROM 中(也就是它们不能四处移动)。现在假设我想跟踪显示图像的顺序,我将每秒更新一次该顺序。我的设备有 1k 的存储空间和磨损均衡,但存储空间中的每个位只能写入 1000 次才会变得不可靠。如果我需要 1kb 来存储订单,那么我的设备只能工作 1000 秒。如果我需要 0.1kb,它将工作 10k 秒,依此类推。因此,设备生命周期将与我每个周期需要更新的位数成反比。
最佳答案
您可以将订单存储在单个 64 位值 x
中:
- 对于第一个选择,20 种可能性,将索引计算为
x % 20
并将x
更新为x/= 20
,< - 对于下一个选择,只有 19 种可能性,计算
x % 19
并将x
更新为x/= 19
。 - 继续此过程 17 次,您就完成了。
关于c - 是否有一种节省空间的方法来存储和检索数据集的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565511/