Блог пользователя JasonMendoza2008

Автор JasonMendoza2008, история, 3 месяца назад, По-английски

Consider this problem (https://mirror.codeforces.com/contest/984/problem/D).

Solution one (https://mirror.codeforces.com/contest/984/submission/276446617) uses two recursive self-explanatory functions (compute_f, and compute_max_xor) that use unordered_map for memoization. It does not pass (2000 ms TLE).

Solution two (https://mirror.codeforces.com/contest/984/submission/276446798) is the same from a logic point of view (dp corresponds to compute_f and dp_max corresponds to compute_max_xor), except it uses Dynamic Programming. It passes in 546 ms.

I thought it could be that different because of hash collisions. Some people hack some other people by using clever inputs that blow up hashmaps ... but adding a random custom_hash did not help whatsoever.

Is the overhead of using an unordered_map that HIGH? Big enough to bring a x4 in time? Or am I missing something else?

Thank you!

EDIT Keeping memoization but using a 2D array instead of an unordered map did the trick. https://mirror.codeforces.com/contest/984/submission/276544726. Crazy. Thank you for your help!

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by JasonMendoza2008 (previous revision, new revision, compare).

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by JasonMendoza2008 (previous revision, new revision, compare).

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

In the first request, you do not respond quickly to the request It’s hard for me to say for how long. And in the second, they made a preconception and responded to a request from O(1)

»
3 месяца назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Unordered map is pretty slow compared to array look up. At the end of the day, unordered map is a hash table which is just an array but with the added step of converting the key to the index in the table with hashing. Hashing is not the quickest operation.

Hopefully it's clear why this is much slower than an array.

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Yes, the combined overhead of unordered_map and recursion can easily cause a 4x slowdown. But the iterative DP approach with vectors is more efficient, avoiding the significant costs associated with hashing and recursion. i think This is the key difference between the two solutions.