- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的程序中,我有一组存储在专有哈希表中的集合。与所有哈希表一样,我需要为每个元素提供两个函数。首先,我需要用于插入的散列值。其次,当有冲突时我需要一个比较函数。我突然想到校验和函数非常适合这个。我可以在两个函数中使用该值。不缺少校验和函数,但我想知道是否有任何我不需要将其引入库的常用函数(我的公司在这方面是 PIA)。系统库就可以了。
但是我还有一个更复杂的要求。我需要可以递增计算的校验和。也就是说,如果一个集合包含 A B C D E F 并且我从集合中减去 D,它应该能够返回一个新的校验和值而无需再次迭代集合中的所有元素。这样做的原因是为了防止我的代码中出现非线性。理想情况下,我希望校验和与顺序无关,但如果需要我可以先对它们进行排序。是否存在这样的算法?
最佳答案
只需在您的集合中存储一个项目字典,以及它们对应的哈希值。该集合的散列值是项目的串联、排序 散列的散列值。在 Python 中:
hashes = '''dictionary of hashes in string representation'''
# e.g.
hashes = { item: hashlib.sha384(item) for item in items }
sorted_hashes = sorted(hashes.values())
concatenated_hashes = ''.join(sorted_hashes)
hash_of_the_set = hashlib.sha384(concatenated_hashes)
作为散列函数,我会使用 sha384,但您可能想尝试 Keccak-384。
因为(当然)没有长度只有 32 位的加密哈希函数,所以您必须改用校验和,例如 Adler-32 或 CRC32。这个想法保持不变。最好对项目使用 Adler32,对连接的哈希使用 crc32:
hashes = { item: zlib.adler32(item) for item in items }
sorted_hashes = sorted(hashes.values())
concatenated_hashes = ''.join(sorted_hashes)
hash_of_the_set = zlib.crc32(concatenated_hashes)
关于c++ - 允许增量计算的校验和实现有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628709/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!