2

我在我的应用程序中使用libLZF进行压缩。在文档中,有一条与我有关的评论:

lzf_compress might use different algorithms on different systems and
even different runs, thus might result in different compressed strings
depending on the phase of the moon or similar factors.

我计划比较压缩数据以了解输入是否相同。显然,如果使用不同的算法,那么压缩数据就会不同。这个问题有解决方案吗?可能是一种每次都强制使用某种算法的方法?或者这个评论在实践中不是真的?毕竟phase of the moon, or similar factors是有点奇怪。

4

2 回答 2

6

即时解压缩,然后进行比较。

libLZF 的网站声明“解压 [...] 基本上是(未优化的)memcpy-speed”。

于 2011-03-15T14:24:47.793 回答
6

“月相依赖”的原因是它们省略了一些数据结构的初始化以挤出一点性能(当然只有在不影响解压缩正确性的情况下)。这不是一个不常见的技巧,就像压缩库一样。因此,如果您将压缩代码放在一个单独的一次性进程中,并且您的操作系统在将其交给进程之前将内存归零(所有“大”操作系统都可以,但有些较小的操作系统可能不会),那么您将始终得到相同的结果压缩结果。

另外,请注意来自 lzfP.h 的以下内容:

/*
 * You may choose to pre-set the hash table (might be faster on some
 * modern cpus and large (>>64k) blocks, and also makes compression
 * deterministic/repeatable when the configuration otherwise is the same).
 */
#ifndef INIT_HTAB
# define INIT_HTAB 0
#endif

因此,我认为您只需要#define INIT_HTAB 1在编译 libLZF 时使其具有确定性,尽管没有进一步分析就不会过多地押注它。

于 2011-03-15T14:51:50.860 回答