在这篇 Kmett CRC 文章中,为啥 ab = a0^n + 0^m b?这个符号是啥意思?

Posted

技术标签:

【中文标题】在这篇 Kmett CRC 文章中,为啥 ab = a0^n + 0^m b?这个符号是啥意思?【英文标题】:On this Kmett CRC article, why does ab = a0^n + 0^m b? What does this notation mean?在这篇 Kmett CRC 文章中,为什么 ab = a0^n + 0^m b?这个符号是什么意思? 【发布时间】:2016-11-15 10:01:45 【问题描述】:

在Edward Kmett's article on CRCs 有以下推导:

CRC(ab) =                               -- definition of CRC
crc(INIT,ab) + FINAL =                  -- linearity
crc(INIT,a0^n + 0^m b) + FINAL =        -- additive homomorphism
crc(INIT,a0^n) + crc(0,0^nb) + FINAL =  -- zero blindness 
crc(INIT,a0^n) + crc(0,b) + FINAL       -- definition of crc
crc(crc(INIT,a),0^n) + crc(0,b) + FINAL -- additive homomorphism
crc(crc(INIT,0^m)+crc(0,a),0^n) + crc(0,b) + FINAL

a0^n0^m b 到底是什么?这些权力是不是像a * pow(0, n)?如果是这样,不是 0^n = 0 吗?还是异或?完全不同的东西?空间重要吗?我不明白为什么,例如:

ab = a0^n + 0^m b

为什么0^m b 在第三行和第四行之间变成了0^nb

【问题讨论】:

wiki.haskell.org/Power_function @Mika'il 正如我所说,0^n = 0 不是吗?没有意义。 【参考方案1】:

他正在使用位串的符号。这里ab分别是长度为mn的位串。

ab    =  a concatenated with b
0^n   =  the bit string of length n consisting of all 0s
a0^n  =  a concatenated with 0^n
0^m b = 0^m concatenated with b
a0^n + 0^m b  = sum of a0^n and 0^m b (same as the bitwise OR in this case)
              = a concatenated with b

【讨论】:

以上是关于在这篇 Kmett CRC 文章中,为啥 ab = a0^n + 0^m b?这个符号是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在计算哈希码时使用 xor 运算符? [复制]

计算机网络CRC检验中为啥选择16或32位效验码,效率最高?

手动计算CRC和CRC软件计算为啥不一样?

为啥 java.util.zip.CRC32.getValue() 返回一个 long 而不是 int?

CRC校验为啥能够保证数据的准确性(出错率很低很低)

php通过字符串生存hashCode