Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-04-2005, 12:10   #1
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
[C] Hashing

Qualcuno mi può parlare un po' degli algoritmi di hashing? Mi potete fare un esempio di una Hash Table scritta in C? Grazie mille!
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 12:38   #2
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Be in c si possono costruire duve vettori di stringe o anche un record associano ad una stringa un'altra, in questo modo è sufficente cercare una stinga nel vettore delle chiavi per poi trovare il corrispettivo valore
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 12:41   #3
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
Ma in pratica la struct della tabella hash qual'è? Mi puoi fare un esempio? Più che altro l'uso delle tabelle hash qual'è? Mi hanno dato da fare un progetto ma non ho chiara la struttura della tabella hash, quindi non posso lavorarci...
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 13:48   #4
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
be il concetto di base è questo :
ho un blocco di informazioni memorizate in coppia chiave, valore es:
chiave1=valore1
chiave2=valore2
chiave3=valore3
chiave4=valore4

poi ho una funzione che passato per parametro una chiave mi restituisce il valore, es prototipo:
char *get(char *);

praticamente è un vettore che invece di usare degli indici numerici progressivi per accedere ai valori utilizza delle stringhe.

Ciao..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 14:09   #5
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Una funzione hash riassume una stringa di bit di lunghezza arbitraria in una di lunghezza fissa, per esempio un intero a 32 bit.
Per cui puoi pensare di utilizzare come indicizzatore di una tabella un dato di qualsiasi lunghezza, appunto la chiave.
Una volta applicata la funzione di hash alla chiave e ottenuto il riassunto utilizzi quello come indice per ottenere l'indirizzo a cui accedere in un vettore semplice.

Più la funzione hash è sicura (e più bit di riassunto usi) più è difficile che due chiavi diverse siano in collisione, cioè abbiano lo stesso riassunto.

Eccoti uno pseudocodice copiato da http://en.wikipedia.org/wiki/Hash_table

Codice:
 record pair { key, value }
 var pair array slot[0..numSlots-1]
 
 function findSlot(key) {
     i := hash(key) modulus numSlots
     loop {
         if slot[i] is not occupied or slot[i].key = key
             return i
         i := (i + 1) modulus numSlots
     }
 }
 
 function lookup(key)
     i := findSlot(key)
     if slot[i] is occupied   // key is in table
         return slot[i].value
     else                     // key is not in table
         return not found     
 
 function set(key, value) {
     i := findSlot(key)
     if slot[i] is occupied
         slot[i].value := value
     else {
         if the table is almost full
             rebuild the table larger (note 1)
         i := findSlot(key)
         slot[i].key   := key
         slot[i].value := value
     }
 }

Ultima modifica di end.is.forever : 07-04-2005 alle 14:11.
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 14:45   #6
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
Quello che non riesco a capire e se quello che mi viene chiesto di implementare è una tabella hash semplice o una tabella hash più complessa...

Vi posto i link ai PDF che mi ha dato il mio professore... C'è questo HASHTABLE che non capisco cosa sia: non mi sembra molto chiaro... Eccoli qua:

Questa è la descrizione del progetto...

http://www.dsi.uniroma1.it/~galesi/descrptog.pdf

E questo è il modulo in cui è presente il tipo HASHTABLE

http://www.dsi.uniroma1.it/~galesi/tavole.pdf

Aiutatemi please!
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 16:06   #7
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
/*
* Elemento di una tavola.
*
* Il campo key è la chiave dell'elemento la stringa.
* Il campo info è un puntatore alla struttura contenente i dati
* associati alla cbiave. Per poter implementare la tavola indipendentemente
* dal tipo dei dati associati alla chiave, questo campo è di tipo void*.
*/
struct tabelem
{
char *key; /*chiave dell'elemento*/
void *info; /*informazioni associate alla chiave*/
};

/*
* Lista di elementi di una tavola.
*/
struct telist
{
struct tabelem *el; /*elemento della tavola*/
struct telist *next; /*coda della lista*/
};

/*
* Tavola di elementi.
*
* La tavola è formata da
* - una tavola hash nella quale gli elementi vengono inseriti e ricercati per
* mezzo della chiave
* - il puntatore alla lista di tutti gli elementi nella tavola
* NB La lista degli elementi serve a scorrere in modo sequenziale gli elementi
* presenti nella tavola.
*/
struct table
{
HASHTABLE htable; /*Tavola Hash*/
struct telist *ls; /*Lista di tutti i nodi*/
};

In base a questo io avrei elaborato questa tavola hash come struttura... Secondo voi è quella che intende il testo??? Eccola

struct hash
{
int a;
struct telist *list;
}
typedef struct hash HashTable;
typedef HashTable *HASHTABLE;

Aiutatemi per favore!
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2005, 20:06   #8
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
Dai per favore!
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2005, 09:31   #9
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
Nessuno proprio mi può aiutare?
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2005, 19:43   #10
Darkslide
Member
 
L'Avatar di Darkslide
 
Iscritto dal: Oct 2003
Messaggi: 49
Prima di tutto una precisazione....esistono 2 tipi di hash:hash chiuso e aperto.

L'hash aperto,in caso di collisione tra chiavi usa una lista per inserire gli elementi.

L'hash chiuso invece applica algoritmi di rehash,in caso di collisione tra 2 chiavi entra in gioco un secondo algoritmo che genera una nuova chiave.


A te quale dei 2 è stato chiesto di implementare?
Darkslide è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2005, 08:59   #11
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
Mi è stato chiesto di implementare l'hash aperto. La lista è la struct telist, che ho postato poco più su, insieme ad altre due strutture... La terza rappresenta una cella dell'hashtable credo... Soltanto che non capisco come vada definito il tipo di dato HASHTABLE... Se mi dessi una manina te ne sarei infinitamente grato... Grazie!
Ancosen è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2005, 19:47   #12
Ancosen
Member
 
L'Avatar di Ancosen
 
Iscritto dal: Jan 2003
Città: Roma
Messaggi: 183
up
Ancosen è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Un deposito anti-speculazione per i nuov...
Anche il cerotto diventa smart: accelera...
Mezzo milione di galassie in una sola im...
Lefant V1 a 99 euro: 40.000 Pa, LED touc...
Adesso il cibo si ordina a voce: Just Ea...
I brani creati dall'IA fuori dalle class...
Il gioco che tutti aspettano nel 2026 no...
Kindle Scribe 32 GB in offerta: schermo ...
MSI rompe gli schemi: il nuovo OLED 4K d...
Dreame V20 sotto i 200 euro: 24.000 Pa, ...
OPPO amplia la gamma Reno16 con Reno16 F...
Addio alle vecchie centrali telefoniche:...
SkyNomad N90 Max: il SUV a 7 posti di Xi...
Dimenticate Windows 11: questo 'ritorno'...
Danubio a secco e si ferma la centrale d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v