Hashing on suosittu tekniikka, jota käytetään tietojen tallentamiseen ja hakemiseen mahdollisimman nopeasti. Pääsyy hajautusten käyttämiseen on se, että se suorittaa lisäys-, poisto-, haku- ja muita toimintoja
Miksi käyttää Hashingia?
Hashingissa kaikki toiminnot, kuten lisääminen, etsiminen ja poistaminen, voidaan suorittaa O(1):ssä eli vakioajassa. Hajautusajan pahimman tapauksen monimutkaisuus on edelleen O(n), mutta keskimääräinen tapauksen ajan monimutkaisuus on O(1).
HashTable
Käytetään uuden hash-taulukon luomiseen.
Syntaksi:
// function to delete a key from the hashtable delete (key) { const index = this._setKey(key); if (this.table[index]) { this.table[index] = []; this.size--; return true; } else { return false; } }> Perustoiminnot syntaksin kanssa
Saada:
Käytetään avaimen etsimiseen hash-taulukon sisällä ja tuohon avaimeen liittyvän arvon palauttamiseen.
Syntaksi:
// function inside hashtable class to // access a value using its key get(key) { const target = this._setKey(key); return this.table[target]; }> Lisää:
Käytetään uuden avain-arvo-parin lisäämiseen hash-taulukon sisään.
Syntaksi:
// function to insert a value in the // hash table using setKey function insert(value) { const index = this._setKey(value); this.table[index] = value; this.size++; }> Hae:
Käytetään arvon etsimiseen.
Syntaksi:
// search a value (by getting its // key using setKey function) search(value){ const index = this._setKey(value); if(this.table[index]==value) console.log('The value is found at index : ',index); else console.log('Not found'); }> Poistaa:
Käytetään tietyn avain-arvo-parin poistamiseen hash-taulukosta.
Syntaksi:
// function to delete a key from the hashtable delete (key) { const index = this._setKey(key); if (this.table[index]) { this.table[index] = []; this.size--; return true; } else { return false; } }> Hashing-komponentit Javascriptissä
1. Hash-taulukko: Hash-taulukko on taulukon yleistys. Se tarjoaa toiminnallisuuden, johon tietokokoelma tallennetaan siten, että ne on helppo löytää myöhemmin tarvittaessa. Tämä tekee elementin etsimisestä erittäin tehokasta.
matriisiohjelma c-kielellä
2. Hash-funktio: Hajautusfunktiota käytetään muuttamaan tietty avain tietyksi paikkaindeksiksi. sitä käytetään yhdistämään jokainen mahdollinen avain yksilölliseen paikkahakemistoon. Jos jokainen avain on kartoitettu yksilölliseen paikkaindeksiin, tiivistefunktio tunnetaan täydellisenä hash-funktiona. Täydellisen hash-funktion luominen on erittäin vaikeaa, mutta meidän tehtävämme ohjelmoijana on luoda sellainen hash-funktio, jonka avulla törmäyksiä on mahdollisimman vähän.
Hyvällä hash-funktiolla tulee olla seuraavat ominaisuudet:
- Tehokkaasti laskettavissa.
- Pitäisi jakaa avaimet tasaisesti (Jokainen pöytäpaikka on yhtä todennäköinen jokaiselle).
- Pitäisi minimoida törmäykset.
- Pitäisi olla alhainen käyttöaste (taulukon kohteiden määrä jaettuna taulukon koolla).
3. Törmäyskäsittely: Koska hash-funktio saa meille pienen luvun suurelle avaimelle, on mahdollista, että kaksi avainta johtavat samaan arvoon. Tilannetta, jossa äskettäin lisätty avain kohdistuu hash-taulukon jo varattuun paikkaan, kutsutaan törmäykseksi ja se on käsiteltävä jollakin törmäyksenkäsittelytekniikalla. Seuraavat tavat käsitellä törmäyksiä:
- Ketjutus: Ajatuksena on saada jokainen hash-taulukon solu osoittamaan linkitettyä luetteloa tietueista, joilla on sama hash-funktion arvo. Ketjuttaminen on yksinkertaista, mutta vaatii lisämuistia pöydän ulkopuolella.
- Avoin osoite: Avoimessa osoittamisessa kaikki elementit tallennetaan itse hash-taulukkoon. Jokainen taulukkomerkintä sisältää joko tietueen tai NIL:n. Elementtiä haettaessa tarkastellaan taulukkopaikkoja yksitellen, kunnes haluttu elementti löytyy tai on selvää, ettei elementtiä ole taulukossa.
Toteutus esimerkillä:
Vaihe 1: Luo HashTable-luokka taulukon ja koon alkuominaisuuksilla.
Vaihe 2: Lisää yksityinen setKey(avain) -funktio avainten muuntamiseksi indekseiksi.
Vaihe 3: Lisää insert()- ja get()-funktiot avainarvo-parien lisäämistä ja käyttöä varten taulukosta.
freddie mercury
Vaihe 4: Lisää poista()-funktio poistaaksesi avaimen hash-taulukosta.
Esimerkki 1: Oletetaan, että meidän on tallennettava 5 numeroa 100, 87, 86, 12, 25 ja 9 hash-taulukkoon. Tässä tapauksessa luomme setKey-funktion, jossa otamme arvon argumenttina ja muunnamme sen hash-taulukon indeksiksi. Alla toteutus.
Javascript
kuinka avata tiedosto javassa
// HashTable Implementation> class HashTable {> >constructor() {> >this>.table =>new> Array(10);> >this>.size = 0;> >}> >// private function to convert key to index> >// _ shows that the function is private> >_setKey(key) {> >return> key % 10;> >}> >// insert value in the hashtable> >insert(value) {> >const index =>this>._setKey(value);> >this>.table[index] = value;> >this>.size++;> >}> >get(key) {> >const target =>this>._setKey(key);> >return> this>.table[target];> >}> >search(value) {> >const index =>this>._setKey(value);> >if> (>this>.table[index] == value)> >console.log(>'The value is found at index : '>, index);> >else> >console.log(>'Not found'>);> >}> >delete>(key) {> >const index =>this>._setKey(key);> >if> (>this>.table[index]) {> >this>.table[index] = [];> >this>.size--;> >return> true>;> >}>else> {> >return> false>;> >}> >}> }> const hashExample =>new> HashTable();> // insert> hashExample.insert(100);> hashExample.insert(87);> hashExample.insert(86);> hashExample.insert(12);> hashExample.insert(9);> console.log(hashExample.table);>// ->näyttää hash-taulukon> // search> hashExample.search(87);>// found> hashExample.search(10);>// not found> // delete> hashExample.>delete>(12);> // showing table after deletion> console.log(hashExample.table);> |
>
>
Lähtö:
[ 100, , 12, , 86, 87, , 9 ] The value is found at index : 7 Not found [ 100, , [], , 86, 87, , 9 ]>
Tulosteessa tai näyttää, että taulukossa on 1 tai 3 peräkkäistä tyhjää tilaa/indeksiä.
Esimerkki 2: Oletetaan, että haluamme tallentaa 5-jäsenisen perheen yhteystiedot hash-taulukkoon. Tätä varten luomme hash-taulukon, jonka koko on 10 ja tallennamme yhteystiedot. Indeksi asetetaan käyttämällä setKey private -toimintoa, joka muuntaa yhteyshenkilön numeron viimeisen numeron hash-taulukon indeksiksi.
ennakkotilaus läpikulku
Javascript
np pehmuste
// HashTable Implementation> class HashTable {> >constructor() {> >this>.table =>new> Array(10);> >this>.size = 0;> >}> >// private function to convert key to index> >// _ shows that the function is private> >_setKey(key) {> >const lastDigit = key % 10;> >return> lastDigit;> >}> >// insert value in the hashtable> >insert(value) {> >const index =>this>._setKey(value);> >this>.table[index] = value;> >this>.size++;> >}> >get(key) {> >const target =>this>._setKey(key);> >return> this>.table[target];> >}> >search(value) {> >const index =>this>._setKey(value);> >if> (>this>.table[index] == value)> >console.log(>'The contact number is found at index : '>, index);> >else> >console.log(>'Contact Number not found'>);> >}> >delete>(key) {> >const index =>this>._setKey(key);> >if> (>this>.table[index]) {> >this>.table[index] = [];> >this>.size--;> >return> true>;> >}>else> {> >return> false>;> >}> >}> }> const hashExample =>new> HashTable();> // insert> hashExample.insert(98754525);> hashExample.insert(98747512);> hashExample.insert(94755523);> hashExample.insert(92752521);> hashExample.insert(98556529);> console.log(hashExample.table);>// ->näyttää hash-taulukon> // search> hashExample.search(92752521);>// found> hashExample.search(92755784);>// not found> // delete> hashExample.>delete>(92752521);> // showing table after deletion> console.log(hashExample.table);> |
>
>
Lähtö:
[ , 92752521, 98747512, 94755523, , 98754525, , 98556529 ] The contact number is found at index : 1 Contact Number not found [ , [], 98747512, 94755523, , 98754525, , 98556529 ]>
Tulosteessa tai näyttää, että taulukossa on 1 tai 3 peräkkäistä tyhjää tilaa/indeksiä.