[so] [SO] [Tema1] General questions

Daniel Baluta daniel.baluta at gmail.com
Wed Feb 23 11:26:24 EET 2011


Salut,

Trimite te rog mailuri în format plain text, respectând regulile de aici [1].

2011/2/23 Adrian Dobrescu <removing_rembrands at yahoo.co.uk>
>
> Mie mi se pare mai natural sa aloci alte bucket-uri și consider că adăugarea la sfârșitul listei nu își are rostul. Motive:
> - Oricum hash-ul se redimensionează. Îl dublezi și creezi noi buckets sau îl înjumătățești și eliberezi memorie.

Hmm, dacă folosești liste pentru buckets atunci se redimensiunează
doar tabloul care ține capetele listelor.

> - Ca să folosești aceeași zonă de memorie, să zicem că adaugi la sfârșitul unui nou bucket. Trebuie să îl realoci. Să îl mărești. Trebuie
să reții un index unde se termina vechea lista de cuvinte din acel
bucket, pentru că va urma să fie parcurs. Apoi, când îi vei
redistribui, va trebui să ștergi elementele de la începutul listei,
deci să faci deplasări, eventual să eliberezi memorie în surplus.

Dacă bucket-ul e ținut ca o listă înălnțuită nu văd ce trebuie să
realoci. Dacă e ținut ca un vector ai dreptate.

Nu am văzut exact unde zice că trebuie să folosești aceeași zonă de
memorie. Oricum problema
e mult mai interesantă dacă faci in place resizing.

> - Nu văd de ce nu e mai eficient din majoritatea aspectelor să aloci o alte liste de cuvinte, și după terminarea procesului de redistribuire, free(vechiul bucket) și modifici pointerul cu cel nou.

Pentru că s-ar putea să nu mai ai memorie sa faci o nouă listă :). Eu
sunt de acord cu soluția propusă de tine și
nu văd unde în enunț îți interzice să faci ce zici tu.

thanks,
Daniel.


More information about the so mailing list