我认为您混淆了 Big O 表示法所代表的含义。它定义了函数的限制行为,不一定是实际行为。
对于插入、删除和搜索操作,哈希映射的平均复杂度为 O(1)。这是什么意思?平均而言,无论哈希映射的大小如何,这些操作都将在恒定时间内完成。因此,根据映射的实现,查找可能不会完全执行一个步骤,但相对于哈希映射的大小,它很可能不会涉及超过几个步骤。
哈希映射对这些操作的实际表现如何取决于几个因素。最明显的是用于存储键的散列函数。优先考虑在散列范围内更均匀地分布计算的散列并限制冲突次数的散列函数。这些区域中的散列函数越好,散列图实际上在恒定时间内运行的越接近。
影响实际哈希映射行为的另一个因素是如何管理存储。随着项目的添加和删除,映射如何调整大小和重新定位条目有助于通过使用最佳数量的桶来控制哈希冲突。有效地管理散列图存储将允许散列图以接近恒定的时间运行。
综上所述,有一些方法可以构建具有 O(1) 最坏情况的查找行为的哈希映射。这是使用完美的散列函数完成的。完美的散列函数是键和散列之间的可逆 1-1 函数。通过完美的哈希函数和适当的哈希映射存储,可以实现 O(1) 查找。使用这种方法的先决条件是事先知道所有的键值,这样才能开发出完美的散列函数。
可悲的是,您的案例不涉及已知键,因此无法构建完美的哈希函数,但是,可用的研究可能会帮助您为您的案例构建近乎完美的哈希函数。