Linearno heširanje

Linearno heširanje je dinamička heš tabela. Algoritam koji je izmislio Vitold Litvin (1980),[1] a kasnije popularizovao Paul Larson. Linearno heširanje omogućava proširenje jednog slota heš tabele u isto vreme. Često se zasebnim slotom za proširenje mogu veoma efikasno kontrolisati dužine lanaca sudara. Troškovi heš tabele ekspanzije se širi preko svake operacije heš tabela umetanja, za razliku od onih koje nastanu odjednom.[2] Linearno heširanje je stoga pogodno za interaktivne aplikacije.

Detalji algoritma

uredi

Prvo početna heš tabela je postavljena sa nekim proizvoljnim početnim brojem kofi(engl. buckets). Sledeće vrednosti treba da budu praćenje:

  •  : : Početni broj kofi.
  •  : Sadašnji nivo koji je ceo broj koji ukazuje na logaritamsku skalu,otprilike koliko je sto porastao u broju. To je u početku  .
  •  : Pokazivač koji ukazuje na korpu. To ukazuje na početak prvog segmenta u tabeli.

Kofa sudari mogu se rešavati na različite načine, ali je tipično da imaju prostor za dva predmeta u svakom segmentu i da dodate još kofi kad god preliva. Više od dve stavke mogu da se koriste kada je implementacija otklanjanja grešaka. Adrese se izračunava na sledeći način:

  • Primenite heš funkciju ključa i pozvati rezultat  .
  • Ako   je adresa koja dolazi pre  , adresa je  .
  • Ako   je   ili adresa koja dolazi nakon  ,adresa je  .

Da biste dodali kofu:

  • Dodati novu kantu na kraj stola.
  • Ako   ukazuje na   kantu u tabeli, resetovati(postaviti na 0)   i povećati  .
  • Inače povećati  .

Efekat svega ovoga je da tabela je podeljena u tri dela;odeljak pre  , deonica od   to  , i deonica posle  . Prva i poslednja sekcije su uskladištene korišćenjem   i i srednji deo koji se čuva koristeći  . Svaki put  dostigne   njto je duplo uvećan sto.

Poeni za prenos

uredi
  • Pune kofe nije heophodno da budu podeljene,i potreban prostor za prekoračenja. U spoljne memorije, to bi moglo da znači drugi fajl.
  • Kofe nisu pune.
  • Svaka kofa bi bila pre ili kasnije podeljena i vraćeno prekoračenje.
  • Split pokazivač ukazuje koja će biti podeljena
    • s je nezavisna od pune kofe
    • Na nivou i, s je između 0 i 2^i
    • s se povećava i na kraju,vraćena na 0.
    • pošto kašika s je podeljena onda s se povećava,samo kašike pre imaju dupli udvostručeni heš prostor.
    • veliki dobar pseudo slučajni broj se dobija prvo, a zatim je bitno-maskiran sa (2^i) - 1 ili (2^(i+1)) -1, ali kasnije primenjuje samo ako je k, slučajni broj, bitno-maskiran sa (2^i) - 1, koji je manji od S, pa veći raspon heš vrednosti odnose samo na segmente koji su već podeljeni.

Za bitovsko-maskiranje broja koristi se x & 0111 , gde je & AND operacija, 111 je binarno 7 , gde je 7 = 8 - 1 i 8 je 2^3 i i = 3.

  • hi (k)= h(k) mod(2^i n)
  • hi+1 udvostručuje domet hi

Algoritam za umetanje 'k' i provere stanje prekoračenja

uredi
  • b = h0(k)
  • ako b < pokazivača onda
  • b = h1(k)

Pretraživanje u heš tabeli za 'k'

uredi
  • b = h0(k)
  • Ako b < pokazivača
  • b = h1(k)

Usvajanje u jezičkim sistemima

uredi

Grisvold i Tovnsend[3] su razgovarali o usvajanju linearnog heširanje u jeziku Ikonica. Oni su razgovarali o alternativama dinamičkog niza algoritma koji se koristi u implementaciji linearnog heširanja,i predstavio poređenja performansi korišćenja lista u aplkikaciji za Ikonice.

Usvajanje u sistemima baza podataka

uredi

Linearno heširanje se koristi u sistemu baze podataka BDB Berkli, koji zauzvrat koristi od strane mnogih softverskih sistema, kao što su OpenLDAP, koristeći implementaciju C izveden iz CACM članka i prvi objavljen u Usenet u 1988 od strane Esmond Pitt.

Reference

uredi
  1. ^ Litwin, Witold (1980), „Linear hashing: A new tool for file and table addressing” (PDF), Proc. 6th Conference on Very Large Databases: 212—223 
  2. ^ Larson, Per-Åke (april 1988), „Dynamic Hash Tables”, Communications of the ACM, 31 (4): 446—457, doi:10.1145/42404.42410 
  3. ^ Griswold, William G.; Townsend, Gregg M. (april 1993), „The Design and Implementation of Dynamic Hashing for Sets and Tables in Icon”, Software - Practice and Experience, 23 (4): 351—367 

Dodatni linkovi

uredi

Vidi još

uredi