TLE 在使用 hashmap 但不是在使用 map[256]= [关闭]
Posted
技术标签:
【中文标题】TLE 在使用 hashmap 但不是在使用 map[256]= [关闭]【英文标题】:TLE whileusing hashmap but not while using map[256]= [closed]TLE 在使用 hashmap 但不是在使用 map[256]= [关闭] 【发布时间】:2021-05-27 10:20:21 【问题描述】:我正在做this code,当我尝试使用像unordered_map<char,int> m
这样的哈希图解决这个问题时,我得到TLE
(超出时间限制),但是每当我使用像map[256]=0
这样的哈希表时,我代码运行良好。为什么会这样? unordered_map 的工作方式与数组的工作方式不一样吗?访问时间复杂度为 O(1)?
【问题讨论】:
【参考方案1】:unordered_map
是渐近 O(1) 但在实时它通常比数组慢得多。
这有几个原因。哈希函数需要一些时间来计算数组不需要的,并且您需要处理哈希冲突,相比之下这可能非常昂贵。数组是连续的内存,可以大大减少缓存未命中。
主要内容是渐近 O 表示法是性能的近似值,但仅适用于大输入,不关心常数。所以一个 O(1) 可以比另一个 O(1) 快 100 倍。
另一个要点是,如果您没有充分的理由不这样做,那么您应该始终更喜欢数组或向量而不是其他数据结构。
如果您的键空间对于数组来说太大,例如 unordered_map<long long, int>
,那么哈希映射会很好。
【讨论】:
以上是关于TLE 在使用 hashmap 但不是在使用 map[256]= [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 SpringBoot 中将 yaml 映射到对象 hashmap