【发布时间】:2021-01-20 17:59:34
【问题描述】:
我想比较 CRC 算法和 MD5 算法的计算复杂度。我发现以下thread 指出MD5 为O(n)。
CRC的时间复杂度是多少? CRC 的时间复杂度与 MD5 相比如何?
我的猜测也是 O(n),因为它必须查看所有要计算的数据。但是,@defines 在他的回答中指出"CRC is computationally much less complex than MD5"。
【问题讨论】:
-
似乎 CRC 也必须是 O(n),因为它的处理时间与输入大小成正比。
-
它们具有相同的复杂度 O(n)。在您阅读的内容中,“复杂”是指“复杂”而不是“计算复杂性”。
-
您可以将wiki example 与this answer 中的crc64c() 函数进行比较。在汇编中使用 XMM 寄存器和无进位乘法 (PCLMULQDQ) 可将 CRC 速度提高 20 到 30 倍,比 crc64c() 快。 MD5 只能通过使用 XMM 寄存器来加快速度。
-
(成本与问题规模成正比增加:O(n) 中的上限,Ω(n) 中的下限:Θ(n) 中的成本。常数因子 do 不同。)
标签: algorithm time-complexity md5 crc