Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Hash table märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 02.01.2009 19:52:25 Hash table vasta tsitaadiga

Tere,

Küsin nõu seoses ühe koolitööga, tegijamatel ei tohiks sellega probleeme olla... kirjutan C-s hashimistabelit kasutades linked listi kokkupõrgete lahendamiseks. Kõik on kena täpselt niikaua kuni on vaja kasutada funktsiooni search ja eelnevalt on hashitud mitu võtit samasse lahtrisse. Kuidas sel juhul teada saada millist võtit täpselt otsin, kuna listi LIFO strateegia annab alati viimasena tabelisse pandu?

Tänud thumbs_up.gif
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.01.2009 20:35:23 vasta tsitaadiga

Kas mitte hashtabeli/dictionary/muude taoliste kasutamise põhimõte ei olegi et 1 väärtus 1 key kohta ?
Ja kokkupõrge tuleks lahendada eelmise väärtuse ülekirjutamisega mitte uue lisamisega.

Miskit näidiskoodi ka näidata on mida täpsemalt üritad teha ja miks just nii ?

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 02.01.2009 21:04:27 vasta tsitaadiga

Hashi-tabeli põhimõte ei ole 1 väärtus 1 lahtri kohta.... Hashimis funktsioon üritab väärtused lahtrisse jagada võimalikult suvaliselt et tekitada ühtlane statistiline jaotus. Lihtsamal juhul on selleks näiteks võti mod tabelisuurus. Ehk siis kui üritad sisestada võtit 867 tabelisse suurusega 30 on hashimise tulemus 867 mod 30 = 27 ning see läheb lahtrisse aadressiga 27. Ja kui nüüd võtta järgmiseks võtmeks 57 siis tuleb hashimise tulemuseks jälle 57 mod 30 = 27 ning võti pushitakse samasse lahtrisse. Eesmärgiks on esitada iga lahtrit linked listina mille pea mäluaadress säilitatakse tabelis ning iga uue võtme lisamisel pushitakse listi ühe koha võrra edasi. Näidiskood on suur ja küsimus on nagunii teoreetilist laadi.

Aga miks ma seda teha üritan? Kuna koolis on vaja icon_biggrin.gif
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 02.01.2009 21:21:05 vasta tsitaadiga

Sa pead originaal (hashimata) võtme kaasa andma ja listi peal lihtsalt lineaarse otsingu tegema.
_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.01.2009 22:51:16 vasta tsitaadiga

Aa, selline hashtable, ma ajasin sassi java HashTable (ja muude samalaadsete) kasutusviisiga, my bad.

Ega vist muud võimalust jah ei ole kui originaal võtmega võrreldes antud listi elemendid läbi käia järjest kuna linkedlistil traditsioonilist binaarotsingut teha ei saa...

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
mesilased
HV kasutaja

liitunud: 31.07.2004




sõnum 03.01.2009 15:18:29 vasta tsitaadiga

troglodyte kirjutas:
Sa pead originaal (hashimata) võtme kaasa andma ja listi peal lihtsalt lineaarse otsingu tegema.


Suured tänud, nii töötab icon_biggrin.gif Mälu kulub ainult n võrra rohkem ning worstcase time complexity on O(1) asemel O(1+n)....
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Hash table
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.