我的目标语言是C ++,但这是一个关于面向对象编程的问题。
假设我有一个类,测试相等性需要花费很多时间,但我也有一个哈希值,我已经计算了它。我可以依赖数据在对象的生命周期中保持不变。
通常的做法是缓存哈希值,并用它来测试不等式吗?
为了使这个例子更具体,我有一个包含可能很长的2D位置列表的类,我期望在它上面进行许多相等的比较。我通过混合所有位置的哈希值来构造哈希值。
在测试相等性时,我首先检查哈希值。如果哈希值相等,我会进行详尽的逐点相等测试。否则我称他们不平等。
答案 0 :(得分:0)
我想你想说,“如果哈希不平等,我会进行详尽的,逐点的平等测试。”
无论如何 - 是的,你有个好主意,这是一个非常合理的设计。你正在为一大块昂贵的CPU和/或待机时间交易一些便宜的存储空间。这样的设计可以带来巨大的性能优势。例如,考虑每个单独的点测试需要数据库查询的情况。
答案 1 :(得分:0)
只要您的哈希算法保证为相同的输入数据生成相同的哈希值,对我来说听起来不错。然后你的检查应该以存储哈希值的额外内存的小成本(以及计算哈希的1倍成本)来大大加快速度。