Блог пользователя stanislav.bezkorovainyi

Автор stanislav.bezkorovainyi, история, 6 лет назад, По-английски

I tried to test perfomance of different approaches to build and use trie data structure.

I used 706D - Vasiliy's Multiset to test my versions of tries on it.

The question is: Why does approach with pointers takes 2 times more memory than one with static array? As I know, a pointer stores an address of a variable, so it shouldn't take that much memory.

Here are my submissions:

Pointer approach: 40063381

Static array approach: 40063561

Any suggestions are welcomed!

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

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

Sorry for my mistakes in English (if there were any)

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

Storing a pointer takes 4 or 8 bits depending on whether you use 32-bit or 64-bit OS.

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

Most probably, it is caused by memory fragmentation.

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

Nice problem, thanks! You can try your trie on this problem, very interesting, but I solved it with sort + implicit trie + binary search in O(n * log(n) * WORD_WIDTH) time, with your trie you can get O(n * WORD_WIDTH) time.

About 64-bits pointers and 32-bit pointers. I think that you can't solve this problem with persistent segment tree if you will use pointers against indexes in array — my friend gets memory limit exceeded, but you can check it and write to me. My solution on array against 64-pointers (russian comments, sorry).

English statement of 4498 e-olymp