Unorded_map lets us access any element in O(1). So unordered_map is very handy for some problems. But sometimes it gives TLE as the worst case time is o(n). How to spot it beforehand and know the hash function will generate heavy collisions?
# | User | Rating |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Unorded_map lets us access any element in O(1). So unordered_map is very handy for some problems. But sometimes it gives TLE as the worst case time is o(n). How to spot it beforehand and know the hash function will generate heavy collisions?
Name |
---|
You need to know:
See if the test cases will generate heavy collisions.
just don't use unordered map simple
who said that unordered_map lets us access any element in O(1), this is a misconception.
Worst case: O(n) Best case: O(1)
So just use map instead, cuz map works O(log(n)) in any case
Actually, you can still use
unordered_map
with custom hash. Please refer to this blog if you want to use a safeunordered_map
. Link. If you are feeling lazy to open the blog, here is the source code:Via this safe custom hash, you can use
unordered_map
like this:Even if you do use custom hash, its constant factor is way too high to be practical. I'd suggest using gp_hash_table