Overal om je heen zie je hashtables, maar de hashtree is vrij zeldzaam.
De informatie die ik nu heb:
HashTable:
De Hash is index in tabel. In tabel staan linked lists met de objecten.
Voordelen:
klein: 2 pointers per object
snel: als er genoeg ruimte is in tabel heb je O(1).
Nadelen:
formaat past zich niet aan en daardoor traag: 100000 elementen in tabel met 5 plaatsen geeft O(n)
of ruimte verspillend: 5 elementen in tabel met 100000 plaatsen = 99.995 % niet gebruikt.
HashTree:
De Hash wordt gebruikt om het object in een boom te plaatsen. Het object komt bij linker kind als hash kleiner is en bij rechter als deze groter is. Als er al wat staat, dan zoek je bij dat kind verder.
Voordelen:
formaat is flexibel: meer elementen => grotere boom
snelheid kan gegarandeerd worden: gebruik 2-3 tree ipv binairy tree. Altijd O(log(N))
Nadelen:
hash moet uniek zijn
groot: hash + 3 pointers (1 naar object + 2 kinderen)
Waarom wordt bijna altijd die tabel gebruikt? Een boom werkt volgens mij beter. Zeker als je een variabele hoeveelheid data hebt. Maar compilers gebruiken allemaal een tabel voor de identifiers
De informatie die ik nu heb:
HashTable:
De Hash is index in tabel. In tabel staan linked lists met de objecten.
Voordelen:
klein: 2 pointers per object
snel: als er genoeg ruimte is in tabel heb je O(1).
Nadelen:
formaat past zich niet aan en daardoor traag: 100000 elementen in tabel met 5 plaatsen geeft O(n)
of ruimte verspillend: 5 elementen in tabel met 100000 plaatsen = 99.995 % niet gebruikt.
HashTree:
De Hash wordt gebruikt om het object in een boom te plaatsen. Het object komt bij linker kind als hash kleiner is en bij rechter als deze groter is. Als er al wat staat, dan zoek je bij dat kind verder.
Voordelen:
formaat is flexibel: meer elementen => grotere boom
snelheid kan gegarandeerd worden: gebruik 2-3 tree ipv binairy tree. Altijd O(log(N))
Nadelen:
hash moet uniek zijn
groot: hash + 3 pointers (1 naar object + 2 kinderen)
Waarom wordt bijna altijd die tabel gebruikt? Een boom werkt volgens mij beter. Zeker als je een variabele hoeveelheid data hebt. Maar compilers gebruiken allemaal een tabel voor de identifiers