Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
 
Hashing doppio
Clicca QUI per vedere il messaggio nel forum
Cic
Ciao ragazzi, qualcuno potrebbe aiutarmi a capire come si svolge l'esercizio numero 3, che si trova qui? http://pighizzini.di.unimi.it/algor...sp16gen2017.pdf

Cronovirus
C'è qualcosa in particolare che non ti torna oppure non riesci proprio a cominciare?

Cic
Non riesco proprio a farlo. Ho visto pure sul libro, ma non capisco come procedere :(

Cronovirus
Ok.. Sarò abbastanza breve, se poi qualcosa non è chiaro dimmi pure.

c(leone,0) = h(leone) = 8. La entry è libera quindi scrivi "leone" nella casella 8.

c(gazzella,0) = h(gazzella) = 6. La entry numero 6 è libera quindi scrivilo li.

c(giaguaro,0) = h(giaguaro) = 6. La entry numero 6 non è libera quindi calcola
c(giaguaro,1) = 1. La entry 1 è libera quindi scrivilo.

c(gorilla,0) = 6 è occupata allora c(gorilla,1)= 7 è libera etc....

Cic
Ok, grazie mille! :)

Cic
Ciao Cronovirus, scusami se ti disturbo ancora, ma perché gufo fa alla casella 12 e bisonte alla 0? E non rispettivamente alla 9 e alla 2?

Cronovirus
immagino che hai sbagliato a fare i conti.. infatti

c(gufo,0) = 6 che è occupata,
c(gufo,1) = 1 che è occupata,
c(gufo,2) = 12 che è libera

Per mandare gufo nella 9 devi avere i = 9 :P

Cic
Innanzitutto grazie ancora per la risposta, ma non mi torno proprio bisonte. Perché faccio così(che sarà sicuramente sbagliato):

C(bisone, 0)=C(bisonte)=1 che è occupata da giaguaro. A questo punto, dato che la 2 sarebbe libera, visto che coniglio non è ancora stato scritto, perché bisonte va alla 0 e non alla 2?

Cic
Alla fine credo di aver capito comunque.

Cronovirus
Scusami.. ma quanto fa

c(bisonte,2) e c(bisonte,3)?

Cic
Non si calcola così? : C(bisonte, 2)=2*(1+(4)) mod 16=0. Dove 1=h(k) e 4=g(k).

Cronovirus
Io direi invece

c(bisonte,2) = ( h(bisonte) + 2* (1 + g(bisonte) ) ) mod 16 = ( 1 + 2 * ( 1 + 4) ) mod 16 = 11 mod 16 = 11

c(bisonte, 3) = ( h(bisonte) + 3* (1 + g(bisonte) ) ) mod 16 = (1 + 3 * (1 + 4) ) mod 16 = 16 mod 16 = 0

Cic
Si vede che sbagliavo allora, perché io facevo che poi il risultato lo dividevo per 16, calcolavo il resto e poi lo sottraevo al numero ottenuto da 11/16. Così:

C(bisonte, 2)=1+2(1+4)=11 mod 16

poi 11/16=0,68 quindi prendo solo 0, poi trovo il resto facendo 0*16 e a questo punto ho 0-0.

Credo di aver fatto un po' di confusione con le operazioni di resto XD

Cic
Ok, ci sono. Riporto 2 esempi.

C(bisonte, 0)=1 occupata.
C(bisonte, 1)=1+1(1+4)=6 mod 16 occupata.
C(bisonte, 2)=1+2(1+4)=11 mod 16occupata.
C(bisonte, 3)=1+3(1+4)=16 mod 16 e quindi 16/16=1, di conseguenza 16-16*1=0 che è una posizione libera.

Così è corretto no?

Cronovirus
direi di sì, leggiti questo al massimo https://it.wikipedia.org/wiki/Operazione_modulo

Cic
Ok, grazie per l'aiuto :)

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate