已知CRC的级联输入的CRC

时间:2014-04-13 20:43:00

标签: crc crc32

如果我有子串S 0 ,S 1 ,... S n ,计算出的CRC C 0 ,C 1 ,... C n ,我能够确定连接输入S的CRC C 0 ... n sub> 0 S 1 ... S n 的效率比线性处理整个字符串的效率要高得多吗?

显然,C 0 ... n = CRC(S 1 ... n ,用C 0 初始化),但是我想知道C 0 ... n = f(C 0 ,C 1 ,... C n )对于某些具有O(n)复杂度的f()而不是O(| S 0 S 1 ... S n |)

1 个答案:

答案 0 :(得分:4)

是。您可以在zlib中了解crc32_combine()的实施方式。它需要crc1crc2len2,其中len2是计算crc2的块中的字节数。需要O(log(len2))时间。可以对以下块重复该组合。

方法是继续crc1上的CRC计算,然后是len2个零字节,然后是异或 - crc2len2字节应用零运算符,该运算符重复平方并应用于1中的每个len2位,这允许O(log(len2))执行时间。该例程于2004年被添加到zlib。