PDA

View Full Version : [C] libreria hash


redcloud
26-12-2005, 23:41
Ciao a tutti, sapreste indicarmi dove trovare una libreria che implementi l'ADT hash table in C? Grazie!

P.s. non mi serve l'esercizietto, ho bisogno proprio di una libreria ben scritta (esente da bug) da utilizzare nei miei programmi.

andbin
27-12-2005, 11:06
Ciao a tutti, sapreste indicarmi dove trovare una libreria che implementi l'ADT hash table in C? Grazie!

P.s. non mi serve l'esercizietto, ho bisogno proprio di una libreria ben scritta (esente da bug) da utilizzare nei miei programmi.
So che la libreria <GLIB> (http://developer.gnome.org/doc/API/2.0/glib/index.html) ("C", portabile Win, Linux, ecc...) ha, tra le varie cose, la gestione di una Hash Table.
Di più non saprei dirti. :(

redcloud
29-12-2005, 21:14
Grazie ma mi serve una lib più leggera, possibilmente dedicata solo per hashtable. Mi è venuto un dubbio cmq, se inserisco un elemento con chiave "ciao" e poi ne inserisco un altro con la stessa chiave, c'è una collisione ma l'ultimo elemento viene cmq inserito in coda o in un'altra posizione. Se poi invece voglio cercare l'elemento con chiave "ciao", quale dei due mi viene restituito? Ho provato con una lib molto scarna e mi viene restituito il primo elemento inserito... forse una lib fatta come si deve mi restitusce un set?

andbin
29-12-2005, 22:03
Grazie ma mi serve una lib più leggera, possibilmente dedicata solo per hashtable. Mi è venuto un dubbio cmq, se inserisco un elemento con chiave "ciao" e poi ne inserisco un altro con la stessa chiave, c'è una collisione ma l'ultimo elemento viene cmq inserito in coda o in un'altra posizione. Se poi invece voglio cercare l'elemento con chiave "ciao", quale dei due mi viene restituito? Ho provato con una lib molto scarna e mi viene restituito il primo elemento inserito... forse una lib fatta come si deve mi restitusce un set?
Guarda ... io non sono esperto di hash table e comunque ci possono essere diversi tipi/varianti di hash table. Un buon documento di base sulle hash table l'ho appena trovato <qui> (http://it.wikipedia.org/wiki/Hash_table).

Comunque il tipo di hash table che conosco io è quello basato sui "bucket" (secchio). In pratica la hash table ha un array di N bucket e in base alla chiave dell'oggetto da inserire, punta a uno di questi bucket. Per ogni bucket c'è una lista di oggetti. Tutti gli oggetti che hanno la stessa chiave finiscono nello stesso bucket, che dovrà quindi essere scansionato in qualche modo per trovare l'oggetto voluto.

andbin
29-12-2005, 22:51
Ho appena trovato questa: libghthash (http://www.ipd.bth.se/ska/sim_home/libghthash.html)

redcloud
30-12-2005, 13:58
Grazie! E' esattamente quello di cui ho bisogno!

Una curiosità...

while {
a = malloc
}

All'uscita del while, a viene deallocata in automatico? Oppure se il ciclo è infinito prima o poi la memoria si saturerà?

andbin
30-12-2005, 14:08
Una curiosità...

while {
a = malloc
}

All'uscita del while, a viene deallocata in automatico? Oppure se il ciclo è infinito prima o poi la memoria si saturerà?
La memoria allocata con malloc() non è mai deallocata in modo automatico, bisogna fare esplicitamente una free().
Comunque il codice sopra non è chiaro, poiché manca la condizione di test e quindi non si capisce bene come e per quale condizione cicla.

Fenomeno85
30-12-2005, 18:21
La memoria allocata con malloc() non è mai deallocata in modo automatico, bisogna fare esplicitamente una free().
Comunque il codice sopra non è chiaro, poiché manca la condizione di test e quindi non si capisce bene come e per quale condizione cicla.

non ho provato ma mica dovrebbe dare errore perchè manca la condizione?

~§~ Sempre E Solo Lei ~§~

andbin
30-12-2005, 18:48
non ho provato ma mica dovrebbe dare errore perchè manca la condizione?
Certo che dà errore. La condizione è obbligatoria!

Fenomeno85
30-12-2005, 18:51
Certo che dà errore. La condizione è obbligatoria!

ok :D

~§~ Sempre E Solo Lei ~§~