【发布时间】:2016-01-17 23:16:26
【问题描述】:
我有一个方向图,对于我计算的每个项目,a crc 代表它自己的数据 + 它指向的项目的数据。
为了避免多次重新计算一个项目的数据,我想对这些项目使用已经计算的 crc。或者在伪代码中:
crc = process_data(data);
for (auto item : items)
crc = combine_magic(crc, item.crc());
问题是 combine_magic 应该是什么。我使用 boost crc 库,但在那里我没有找到这样的功能。简单地使用 xor 是一个坏主意,因为我可能会完成一些指向偶数次的项目——这会将它们从等式中消除。 Zlib 似乎提供了这样的功能https://github.com/madler/zlib/blob/master/crc32.c,但我想避免再添加一个依赖项。
【问题讨论】:
-
看起来您可以在图中的每个节点上调用
process_bytes()。如果您需要分支,那么您可以在访问下一个节点之前复制 crc 对象。 -
@moof2k 谢谢,这也是我考虑过的一个选项 - 但我放弃了它,因为它对于目标来说似乎有点太贵了 - 而且并行计算很难,因为它需要单个 crc 对象遍历所有项目。