StasyaCat's blog

By StasyaCat, history, 11 months ago, In English,

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!

 
 
 
 
  • Vote: I like it  
  • -11
  • Vote: I do not like it  

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

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

»
11 months ago, # |
  Vote: I like it +3 Vote: I do not like it

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

»
11 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Most probably, it is caused by memory fragmentation.

»
11 months ago, # |
  Vote: I like it 0 Vote: I do not like it

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