Mi a különbség Hash
és Dictionary
között?
Szkriptelési háttérből származva úgy érzem, hogy hasonlóak, de szerettem volna kideríteni a pontos különbségeket. A guglizás nem sokat segített nekem.
Válasz
Hash
egy rendkívül rosszul megnevezett adatstruktúra, ahol a programozó összekeverte az interfészt a megvalósítással ( és lusta volt a teljes név, azaz HashTable
inkább rövidítéshez folyamodik, Hash
).
Dictionary
a felület “helyes” neve (= a ADT ), azaz egy asszociatív tároló, amely (általában egyedi) kulcsokat (nem feltétlenül egyedi) értékekhez társít.
A hash tábla egy lehetséges ilyen szótár megvalósítása, amely meglehetősen jó hozzáférési jellemzőket biztosít (futásidejű szempontból), és ezért gyakran az alapértelmezett megvalósítás.
Egy ilyen megvalósításnak két fontos tulajdonsága van:
- a kulcsoknak ha-nak kell lenniük shable és egyenlőség összehasonlítható .
- a bejegyzések nem külön sorrendben jelennek meg a szótárban.
(A A be hashable azt jelenti, hogy számszerű értéket számolhatunk egy kulcsból, amelyet később egy tömb indexeként használunk.)
A szótár adatstruktúrájának vannak alternatív megvalósításai, amelyek sorrendet a billentyűkön – ezt gyakran rendezett szótárnak hívják (és általában egy keresési fán keresztül valósítják meg, bár más hatékony megvalósítás is létezik).
összegezzük: a szótár egy ADT, amely a kulcsokat feltérképezi az értékekre. Ennek az ADT-nek több lehetséges megvalósítása létezik, amelyek közül a hash tábla egy. A Hash
helytelen elnevezés, de összefüggésében egyenértékű egy szótárral, amelyet hash-táblázatban valósítanak meg.
Megjegyzések
- Példaként a C ++ nyelven a standard asszociatív tárolósablonok nem kerülhetnek ' kivitelezésre hash-ként, bár a következő szabvány a hatékony hash táblákat tartalmazza. ' Felhívták
unordered_map
-et, hogy megmutassák, mit csinálnak, nem pedig, hogy mik. - „helyes” a milyen hatóság? Bizonyos nyelveken, például a Ruby és a Perl, ezeknek a struktúráknak a hivatalos – olvassa el a „helyes” – neve „hash”.
- @nohat: Vegye figyelembe, hogy idézeteket használok. Továbbá, megmagyaráztam , hogy miért választják rosszul a nevet, nem? Tehát ha jogosultságra van szükséged, akkor azt mondom, hogy az elméleti informatikai rendőrség hatáskörébe tartozik.
- Érdekes, hogy a Ruby 1.9-ben valójában lehetetlen megvalósítani a
Hash
osztály hash táblával, mivel a Ruby 1.9Hash
es megőrzi a beszúrási sorrendet, míg a hash tábla nem. Tehát a Ruby 1.9-ben aHash
név nem ' nem is tükrözi tovább a megvalósítást. - @hippietrail Téved – először is, ezek objektív leírások. Végül is minősítem, miért rossz a névadás és helytelen elnevezés (lásd alább). A „túl lusta” művészi engedély a részemről, de a lényeg továbbra is az, hogy a név rövidítésének oka önmagában rejlik, vagyis a név lerövidítésén kívül itt nincs ok rövid név használatára. És téved a „szótárral” kapcsolatban: ez egyszerűen az adatstruktúra hivatalos neve . A „szótár” definíciója téves az informatika összefüggésében, és a név évtizedekkel előzi meg a Pythont.
Válasz
A “szótár” a koncepció neve. A hashtable lehetséges megvalósítás.
Megjegyzések
- A hash szintén ADT. A HashTable egy hash implementációja
- @Sairam, azt hiszem, sokkal gyakoribb, ha ' hash ' jelent hash függvény, nem hash tábla.
- @jk Valójában a " hash " az alkalmazás eredménye. a " hash függvény / algoritmus " valamilyen bemenethez. " hash tábla " vagy " hash map " omehoe valamilyen objektumhoz kapcsolódik és hashable objektumot (objektum általános formában, nem korlátozódik az OOP-ra)
- Vannak olyan nyelvek, amelyek ' Hash ' egy szótár típusú struktúrára való hivatkozás helyett csak a hash függvény működésére. Például Ruby .
Válasz
A szótár a gyors kereséshez / beillesztéshez használt bármely adatszerkezet-megvalósításhoz adott gyűjtőfogalom. Ez különféle adatstruktúrák segítségével érhető el / valósítható meg, például hash-tábla, átugrási listák, rb-fa stb. A hash-tábla egy speciális adatstruktúra, amely számos célra hasznos, beleértve a szótár megvalósítását is. h3>
- A hash szintén ADT. Van-e konkrét különbség a Hash és a Dictionary ADT között?
- @Sairam: Nem, a kivonat egy bizonyos típusú algoritmus (hash függvény) kimenete.
Válasz
A szótár kulcsot használ a utaljon közvetlenül az asszociatív tömb értékére.
azaz (KEY => VALUE)
A hash gyakrabban hash tábla , amely egy hash függvényt használ a számításhoz a memória helye (vagy könnyebben egy tömb), ahol az érték lesz. A kivonat a KEY-t veszi bemenetként, és értéket ad kimenetként. Ezután dugja be ezt az értéket a memória vagy a tömbindexbe.
azaz KEY => HASH FUNCTION => VALUE
Gondolom, az egyik közvetlen, míg a másik közvetlen isn “t. A hash függvények sem biztos, hogy tökéletesek, és néha a rossz értékre hivatkozó indexet is adhatnak. De ez kijavítható.
Legjobb hely a keresésre: Wikipedia ( asszociatív tömb és hash tábla )