Wat is een hash-functie, het is iets dat overal in de informatica wordt gebruikt.
Een hashfunctie is gewoon een functie die een waarde met een vaste lengte genereert voor elke invoer die deze krijgt.
Goed, wat betekent dat?
Nou, ik heb hier een aangepaste hash-generator genaamd vijf is het type hash-functie en er zijn vele, vele soorten
waarvan je misschien hebt gehoord, schoot één keer naar 56 en vele anderen.
Laten we met behulp van deze hashfunctie eens kijken wat er gebeurt als ik dat doe.
Hallo?
Je ziet dat meteen, en de vijf hashes deze string en verandert het in dit gebrabbel.
Dat is wat een hash-functie doet, we geven het een invoer en de functie genereert een willekeurig patroon.
Nu zijn er enkele belangrijke aspecten van hash-functies.
Ten eerste is het een manier.
In die zin dat als ik iemand dit geef, ze geen idee hebben wat de input was en het voor mij praktisch onmogelijk
is om enig idee te hebben van wat de input is.
De tweede is dat het niet uitmaakt hoe vaak ik hallo zeg, het zal hetzelfde zijn.
Maar zodra ik één ding verander, zal het de output volledig veranderen.
Als ik terug ga naar hallo en.
Kijk hoe ik verander naar Hoofdletter H, zelfs een hoofdletter, dus het begint met vijf D vier, als
ik Hoofdletter H doe, is het weer helemaal anders.
En als we dit bekijken, kunnen we tenminste zeggen dat, hmm, ik weet niet waar dit nuttig voor is, maar het enige dat
ik weet is dat wat er ook gebeurt, als ik het dezelfde input geef, het zal geven ik
hetzelfde resultaat.
Maar ik heb geen idee hoe ik dit weer kan omzetten in hallo.
Dit is wat we onafhankelijk of onafhankelijk noemen, er zijn verschillende uitspraken, ik weet niet precies welke,
maar het is een mooie manier om te zeggen dat een functie, gegeven een invoer, altijd dezelfde
uitvoer uitvoert.
Nu, het enige voordeel en waarom we dit en een datastructuur zouden willen gebruiken, is dat we
echt snelle datatoegang krijgen, want alles wat ik hoef te doen om Graps of Baskett DOT Graps te vinden, is Graps door te geven in zoiets als een lege
vijf hash.
Het genereert dit nummer voor mij en ik weet meteen waar het zich in mijn geheugen op onze computer bevindt.
Maar dit ziet er toch niet uit als een adres?
Technisch gezien zal een hash-functie die we gebruiken voor hash-tabellen grappen maken, een soort wartaal
genereren en het vervolgens converteren naar een indexbasis of een adresbasis die het heeft op basis van dit nummer.
Zie je, in tegenstelling tot een race waar we net indexen met hash-tabellen hadden besteld, hoeven we alleen maar een sleutel te geven en we
weten precies waar dat item zich in ons geheugen bevindt.
Maar je vraagt je misschien af, vertraagt deze black box hash-functie de zaken niet?
Want elke keer willen we een woning toevoegen.
En een waarde druiven en tienduizend tot een hash-tabel, we moeten het door de hash-functie laten lopen, zodat we kunnen beslissen waar
we het in het geheugen plaatsen.
En als je dat hebt gemerkt, goed gedaan, dat is een grote factor.
Je wilt niet dat dit erg lang duurt, want elke keer dat je een eigenschap aan het geheugen toevoegt
of een eigenschap aan het geheugen ophaalt, omdat, nogmaals, we beide keren de sleuteldruiven naar de hash-functie sturen om vinden waar
je het vandaan kunt halen.
We moeten dit heel, heel snel hebben.
En onder de motorkap, onthoud, omdat hash-tabellen in alle talen bestaan, zijn ze geïmplementeerd met
een optimale hash-functie die heel, heel snel is.
Als een kanttekening.
Hash-functies zoals shot to zesenvijftig duren erg lang om een hash te genereren.
En het is een te complexe hashing-functie die veel wordt gebruikt op plaatsen zoals cryptografie waar je wilt
dat dit langer duurt, maar dat valt buiten het bestek van deze cursus.
Als je geïnteresseerd bent, raad ik je aan om de verschillen tussen deze twee te bekijken.
Om te beoordelen, we hebben een sleutel die graps is, we sturen deze door een hash-functie die iets
heel, heel snel gaat hashen en dan brengen we de hash in kaart in een geheugenadres waar we
onze willen opslaan.
Gegevens zijn grappen 10000.
En als het gaat om hash-functies, laat je dit meestal over aan welk framework of
welke taal je ook gebruikt, en we gaan meestal uit van een tijd, complexiteit of bigo-notatie van een één, omdat dit heel snel
gebeurt.
Oke.
Nu we begrijpen wat deze zwarte doos doet, laten we wat meer praten over hashtabellen, waarom ze nuttig
zijn en waarom ze in sommige gevallen beter zijn dan iRace.