Hash table

Hash table
Una piccola rubrica telefonica come esempio di hash table.
ClasseStruttura dati
Struttura datiTabella Hash
Caso peggiore spazialmenteO(n)
OttimaleSpesso

In informatica una hash table o hash map, in italiano tabella hash o mappa hash, è una struttura dati usata per mettere in corrispondenza una data chiave con un dato valore. Viene usata per l'implementazione di strutture dati astratte associative come le mappe o i set.

È molto utilizzata nei metodi di ricerca nominati hashing ovvero un'estensione della ricerca indicizzata da chiavi che gestisce problemi di ricerca nei quali le chiavi di ricerca non presentano queste proprietà. Una ricerca basata su hashing è completamente diversa da una basata su confronti: invece di muoversi nella struttura data in funzione dell'esito dei confronti tra chiavi, si cerca di accedere agli elementi nella tabella in modo diretto tramite operazioni aritmetiche che trasformano le chiavi in indirizzi della tabella.

Esistono vari tipi di algoritmi di hashing. Per quanto affermato, in una tabella di hashing ben dimensionata il costo medio di ricerca di ogni elemento è indipendente dal numero di elementi. L'hashing è un problema classico dell'informatica; molti algoritmi sono stati proposti, studiati a fondo e impiegati in pratica. Due metodi molto diffusi sono l'hashing statico e l'hashing estendibile e lineare, metodi utilizzati anche dai programmi di gestione delle basi di dati.

Descrizione

Funzionamento e implementazione

Il primo passo per realizzare algoritmi di ricerca tramite hashing è quello di determinare la funzione di hash: il dato da indicizzare viene trasformato da un'apposita funzione di hash in un intero compreso tra ed che viene utilizzato come indice in un array di lunghezza m. Supponendo che sia l'universo delle chiavi e una tabella hash, una funzione hash h, stabilisce una corrispondenza tra e le posizioni nella tabella hash, quindi:

Idealmente, chiavi diverse dovrebbero essere trasformate in indirizzi differenti, ma poiché non esiste la funzione di hash perfetta, ovvero totalmente iniettiva, è possibile che due o più chiavi diverse siano convertite nello stesso indirizzo. Il caso in cui la funzione hash applicata a due chiavi diverse genera un medesimo indirizzo viene chiamato collisione e può essere gestito in vari modi. La scelta di una buona funzione di hash è indispensabile per ridurre al minimo le collisioni e garantire prestazioni sempre ottimali. Il risultato migliore si ha con funzioni pseudo-casuali che distribuiscono i dati in input in modo uniforme.

Molto spesso però, una buona funzione di hash può non bastare: infatti le prestazioni di una hash table sono fortemente legate anche al cosiddetto fattore di carico (load factor) calcolato come

e che dice quanta probabilità ha un nuovo elemento di collidere con uno già presente nella tabella. Questa probabilità, in realtà, è più alta di quanto si possa pensare, come dimostra il paradosso del compleanno. È bene dunque mantenere il load factor il più basso possibile (di solito un valore di 0,75 è quello ottimale) per ridurre al minimo il numero di collisioni. Ciò può essere fatto, ad esempio, ridimensionando l'array ogni volta che si supera il load factor desiderato.

Gestione delle collisioni

Di seguito vengono riportati i metodi più diffusi per la gestione delle collisioni.

  • Open Hash
  • Hash con concatenazione (o con lista di trabocco): per ogni cella della tabella di hash si fa corrispondere invece di un elemento, una lista (solitamente una lista concatenata). In questo modo un elemento che collide viene aggiunto alla lista corrispondente all'indice ottenuto.

Open Hash

Nell'indirizzamento aperto, tutti gli elementi sono memorizzati nella tavola hash stessa; ovvero ogni cella della tavola contiene un elemento dell'insieme dinamico o la costante NULL. Quando cerchiamo un elemento, esaminiamo sistematicamente le celle della tavola finché non troviamo l'elemento desiderato o finché non ci accorgiamo che l'elemento non si trova nella tavola.

Diversamente dal concatenamento, non ci sono liste né elementi memorizzati all'esterno della tavola. Quindi nell'indirizzamento aperto, la tavola hash può "riempirsi" al punto tale che non possono essere effettuati altri inserimenti.

Il vantaggio dell'indirizzamento aperto sta nel fatto che esclude completamente i puntatori, calcoliamo la sequenza delle celle da esaminare (ispezione).

Un concetto importante al riguardo è il cosiddetto hashing uniforme. Rappresenta l'hashing ideale, ovvero ogni cella della tabella ha la stessa probabilità di contenere un dato elemento.

Esistono diverse tecniche di ispezione, le tre tecniche più comunemente utilizzate sono: ispezione lineare, ispezione quadratica e doppio hashing. Tuttavia, nessuna di queste tecniche soddisfa l'ipotesi di hashing uniforme, in quanto nessuna di esse è in grado di generare più di sequenze di ispezione differenti (anziché , come richiede l'hashing uniforme).

Tecniche comunemente utilizzate di ispezione

Ispezione lineare

Quando si incontra una collisione non si fa altro che utilizzare l'indice successivo a quello che collide, sino a che non si trovi una casella libera.

Ispezione quadratica

Quando si incontra una collisione non si fa altro che utilizzare l'indice che collide elevato al quadrato con normalizzazione rispetto alla grandezza della tabella dell'indice ottenuto, sino a che non si trovi una casella libera.

Doppio Hashing

dove, per esempio possiamo porre e .

Se facendo l'hash di una chiave si incontra una collisione, allora si somma all'indice ottenuto il risultato di una nuova funzione hash (generalmente diversa dalla prima e che ha come parametro l'indice ottenuto precedentemente), e si tenta l'inserimento nel nuovo indice così ottenuto, riapplicando la seconda funzione sino a che non si trovi una casella libera.

Hashing statico

Nell'hashing statico si utilizza il concetto di bucket, che è l'insieme di pagine contenenti le etichette dei record di dati. Se una pagina bucket primaria è piena, viene creata una pagina di overflow. Per cercare l'etichetta corrispondente alla chiave ( numero di bucket) si utilizza la seguente formula di hash a cui appartiene l'etichetta. La funzione di hash agisce sul campo della chiave di ricerca del record e deve distribuire i valori su ( bucket). Le prestazioni della ricerca dipendono molto dalla funzione .

Le pagine di bucket primarie, nell'hashing statico, sono allocate consecutivamente. Questo può portare ad avere il problema di lunghe catene di overflow che degradano le prestazioni dato che non abbiamo pagine contigue.

Esempio di funzione hash

(con e costanti)

Hashing estendibile

Sostanzialmente è un miglioramento dell'hashing statico, perché oltre ad inserire bucket di overflow permette di raddoppiare il numero di bucket e di riorganizzare le etichette. L'unico problema sta nella riorganizzazione delle etichette, dato che questa operazione è costosa in termini di tempo. Esistono due soluzioni. La prima (hashing estendibile) gestisce una directory di puntatori ai bucket primari, la seconda (hashing lineare) permette di risolvere il problema senza l'utilizzo delle directory ma con una famiglia di funzioni hash. Nell'hashing estendibile si parla di profondità di directory e si intende il numero minimo di bit che permette di rappresentare il numero di elementi contenuti nella directory.

Hashing lineare

L'hashing lineare, come accennato nel paragrafo precedente, permette di risolvere il problema delle lunghe catene di overflow senza l'utilizzo delle directory. L'idea di base è quella di utilizzare una famiglia di funzioni hash dove ha un range che è la metà di quello di . Questo vuol dire che il range di è

Esempio

Se allora il numero minimo di bit per la rappresentazione del numero è 5. Quindi cioè La prossima funzione avrà range e potrà rappresentare i bucket da 0 a 63. La funzione di hash sarà come segue

Bilanciamento spazio/tempo

In base alla grandezza dell'array in cui avviene la ricerca e la memorizzazione delle informazioni, si ha una tabella della complessità computazionale del tempo necessario alla ricerca stessa. A maggiore spazio disponibile, corrisponderà un minor tempo necessario nel caso peggiore.

Spazio Tempo

Ad corrisponde il numero di elementi presenti nell'array, ad il numero di posti disponibili mentre è il fattore di carico.

Analisi del costo di scansione

Il numero di passi da effettuare per una scansione completa della tabella è data nel caso medio da:

Esito ricerca Scansione lineare Hashing doppio / Scansione quadratica
Chiave trovata
Chiave non trovata

dove α è il fattore di carico.

Bibliografia

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Introduzione agli algoritmi. Jackson Libri, 2003, ISBN 88-256-1421-7.

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autoritàGND (DE1046573225
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

Read other articles:

Artikel ini bukan mengenai No Matter How I Look at It, It's You Guys' Fault I'm Not Popular!. Hey, I'm PopularGambar sampul manga volume pertama私がモテてどうすんだ(Watashi ga Motete Dōsunda)GenreKomedi romantis,[1] Harem terbalik[2] MangaPengarangJunkoPenerbitKodanshaPenerbit bahasa InggrisNA Crunchyroll (daring)Kodansha ComicsPenerbit bahasa IndonesiaM&C!MajalahBessatsu FriendDemografiShōjoTerbit11 Oktober 2013 – 13 Februari 2018Volume14 Drama audioRilis13 ...

 

Bahasa LangitAlbum studio karya Ebiet G. AdeDirilis28 November 2001GenrePopjazzOrkestraLabelPT BMG Music Kama RecordsKronologi Ebiet G. Ade Balada Sinetron Cinta (2000)Balada Sinetron Cinta2000 Bahasa Langit (2001) In Love: 25th Anniversary (2007)In Love: 25th Anniversary2007 Bahasa Langit merupakan salah satu album Ebiet G. Ade. Album ini dirilis pada November 2001 oleh PT BMG Music. Dalam album ini, Ebiet terus mempertahankan warna musiknya dan mengatakan album ini sebagai perenungan te...

 

Lisa Leslie Lisa Leslie nel dicembre 2010 Nazionalità  Stati Uniti Altezza 196 cm Peso 77 kg Pallacanestro Ruolo Centro Termine carriera 2009 Hall of fame Naismith Hall of Fame (2015)Women's Basketball Hall of Fame (2015)FIBA Hall of Fame (2022) Carriera Giovanili Morningside High School1990-1994 USC Trojans Squadre di club 1994-1995 SC Alcamo16 (362)1997-2009 L.A. Sparks363 Nazionale 1989 Stati Uniti U-191991-2008 Stati Uniti Palmarès Competizione Ori Ar...

Cet article est une ébauche concernant l’Aisne et une ancienne commune de France. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Les Creuttes Administration Pays France Région Hauts-de-France Département Aisne Arrondissement Laon Commune Mons-en-Laonnois Statut Commune supprimée Démographie Population 90 hab. (1806) Géographie Coordonnées 49° 32′ 11″ nord, 3° 32′ 2...

 

Vapor-deposited magnesium crystals from the Pidgeon processThe Pidgeon process is a practical method for smelting magnesium. The most common method involves the raw material, dolomite being fed into an externally heated reduction tank and then thermally reduced to metallic magnesium using 75% ferrosilicon as a reducing agent in a vacuum.[1] Overall the processes in magnesium smelting via the Pidgeon process involve dolomite calcination, grinding and pelleting, and vacuum thermal ...

 

ХристианствоБиблия Ветхий Завет Новый Завет Евангелие Десять заповедей Нагорная проповедь Апокрифы Бог, Троица Бог Отец Иисус Христос Святой Дух История христианства Апостолы Хронология христианства Раннее христианство Гностическое христианство Вселенские соборы Н...

2020年夏季奥林匹克运动会波兰代表團波兰国旗IOC編碼POLNOC波蘭奧林匹克委員會網站olimpijski.pl(英文)(波兰文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員206參賽項目24个大项旗手开幕式:帕维尔·科热尼奥夫斯基(游泳)和马娅·沃什乔夫斯卡(自行车)[1]闭幕式:卡罗利娜·纳亚(皮划艇)&#...

 

  关于与「內閣總理大臣」標題相近或相同的条目页,請見「內閣總理大臣 (消歧義)」。 日本國內閣總理大臣內閣總理大臣紋章現任岸田文雄自2021年10月4日在任尊称總理、總理大臣、首相、阁下官邸總理大臣官邸提名者國會全體議員選出任命者天皇任期四年,無連任限制[註 1]設立法源日本國憲法先前职位太政大臣(太政官)首任伊藤博文设立1885年12月22日,...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (مايو 2019) ألان بومونت معلومات شخصية الميلاد 24 ديسمبر 1934   نيوكاسل  الوفاة 21 سبتمبر 2004 (69 سنة)   كانبرا  مواطنة أستراليا  الحياة العملية المهنة عسكري  الخدم...

American monthly magazine Connecticut MagazineCategoriesRegional magazineFrequencyMonthlyPublisherHearst CommunicationsFirst issue1971(53 years ago) (1971)CountryUnited StatesBased inNew Haven, Connecticut U.S.LanguageEnglishWebsitewww.ctinsider.com/connecticutmagazine/ISSN0889-7670 Connecticut Magazine is an American monthly magazine covering the life, culture, politics, and style of the state of Connecticut. Founded in 1971, it was purchased in 2017 by the Hearst Corporation. It i...

 

Cohort born from 1946 to 1964 Boomer and Baby Boomer redirect here. For the video game, see Baby Boomer (video game). For other uses, see Boomer (disambiguation). Part of a series onSocial generations of the Western world Lost Generation Greatest Generation Silent Generation Baby boomers Generation X Millennials Generation Z Generation Alpha vte Baby boomers, often shortened to boomers, are the demographic cohort following the Silent Generation and preceding Generation X. The generation is of...

 

American engineer (1944–2023) Michael HorodniceanuHorodniceanu in 2013BornMihai Horodniceanu(1944-08-04)August 4, 1944Bucharest, RomaniaDiedJune 22, 2023(2023-06-22) (aged 78)Forest Hills, New York, U.S.NationalityRomanianAmericanOccupationCivil Engineer 2013, discussing the Second Avenue Subway 2015, 34 St-Hudson Yards Opening Michael Horodniceanu (born Mihai Horodniceanu; August 4, 1944 – June 22, 2023) was a Romanian-born American civil engineer who served as traffic commissioner ...

Indigenous language spoken in Amazon Basin BoraMeamuynaNative toPeru, ColombiaEthnicityBora peopleNative speakers2,400 (2000)[1]Language familyBora–Witoto? BoranBoraLanguage codesISO 639-3boaGlottologbora1263ELPBora Bora is an indigenous language of South America spoken in the western region of Amazon rainforest. Bora is a tonal language which, other than the Ticuna language, is a unique trait in the region. The majority of its speakers reside in Peru and Colombia. Around ...

 

Pour les articles homonymes, voir Synonymie. Le vampire des abysses Vampyroteuthis infernalis Chun, 1903 admet de nombreux synonymes :• Cirroteuthis macrope Berry, 1911• Vampyroteuthis macrope Berry, 1911• Melanoteuthis lucens Joubin, 1912• Watasella nigra Sasaki (en), 1920• Danateuthis schmidti Joubin, 1929• Hansenoteuthis lucens Joubin, 1929• Melanoteuthis schmidt Joubin, 1929• Melanoteuthis beebei Robson, 1929• Retroteuthis pacifica Joubin, 1929• Melanoteuthi...

 

Governor of VorarlbergLandeshauptmann von VorarlbergCoat of arms of ViennaFlag of ViennaIncumbentMarkus Wallnersince 7 December 2011StyleMr. Governor (formal)StatusLandeshauptmannMember ofVorarlberger LandtagSeatNeues Landhaus, BregenzNominatorPolitical PartiesAppointerLandtagsworn in by the PresidentTerm lengthfive years (no term limit)Constituting instrumentFederal Constitutional LawFormation1860First holderSebastian Ritter von FroschauerWebsitevorarlberg.at This is a list of governor...

American manufacturing company For the Australian entertainment company, see Crown Resorts. For the American cable network operator, see Crown Media. Crown Holdings, Inc.Brand-Building PackagingCompany typePublic companyTraded asNYSE: CCKS&P 400 componentIndustryPackagingFounded1892; 132 years ago (1892)FounderWilliam PainterHeadquartersYardley, Pennsylvania, U.S.Key peopleTimothy J. Donahue(CEO, President, and Chairman of the Board)Kevin C. Clothier(CFO and SVP)Pro...

 

У этого топонима есть и другие значения, см. Улица Бехтерева. У этого топонима есть и другие значения, см. улица Троцкого. улицаБехтерева Улица Бехтерева (от Советской площади) Общая информация Страна Россия Регион Тверская область Город Ржев Район Советский Протяжённост...

 

Необходимо проверить качество перевода, исправить содержательные и стилистические ошибки. Вы можете помочь улучшить эту статью (см. также рекомендации по переводу).Оригинал на английском языке — Ben (album). Ben Студийный альбом Майкла Джексона Дата выпуска 4 августа 1972 Дат...

Kementerian KeuanganMinisterie van FinanciënLambang BelandaKementerian KeuanganInformasi DepartemenDibentuk12 Maret 1798; 226 tahun lalu (1798-03-12)Wilayah hukumKerajaan BelandaKantor pusatKorte Voorhout 7, Den Haag, BelandaPegawai1,500Anggaran tahunan€ 3,9 miliar (2022)[1]MenteriSigrid Kaag, Menteri KeuanganWakil MenteriMarnix van Rij, Sekretaris NegaraAukje de Vries, Sekretaris NegaraSitus webKementerian Keuangan Kementerian Keuangan (bahasa Belanda: Ministerie van Fina...

 

月姫 (ゲーム) > 真月譚 月姫 真月譚 月姫 ジャンル 伝奇 アニメ 原作 奈須きのこ、TYPE-MOON 監督 桜美かつし シリーズ構成 ときたひろこ キャラクターデザイン 武内崇(オリジナル)、小澤郁 音楽 大森俊之 アニメーション制作 J.C.STAFF 製作 「真月譚 月姫」製作委員会 放送局 BS-i 放送期間 2003年10月 - 12月 話数 全12話 漫画 原作・原案など 奈須きのこ、TYPE-MOON 作画 �...