Tablica mieszająca

Przykład zastosowania: książka telefoniczna, w której klucz to imię i nazwisko danej osoby, a wyszukiwana informacja to numer telefonu

Tablica mieszająca lub tablica z haszowaniem (ang. hash table, niekiedy błędnie[potrzebny przypis] tłumaczone jako „tablica haszująca”) – struktura danych, która jest jednym ze sposobów realizacji tablicy asocjacyjnej, tj. abstrakcyjnego typu danych służącego do przechowywania informacji w taki sposób, aby możliwy był do nich szybki dostęp. Tablica mieszająca umożliwia również szybkie porównywanie danych, np. fragmentów tekstów, plików.

Odwołania do przechowywanych obiektów dokonywane są na podstawie klucza, który dany obiekt (informację) identyfikuje.

Podstawowe informacje

Tablice mieszające opierają się na zwykłych tablicach indeksowanych liczbami – dostęp do danych jest bardzo szybki, nie zależy od rozmiaru tablicy ani położenia elementu (przynajmniej teoretycznie, patrz sekcja Wady). W tablicy mieszającej stosuje się funkcję mieszającą, która dla danego klucza wyznacza indeks w tablicy; innymi słowy przekształca klucz w liczbę z zadanego zakresu.

Funkcje te są zwykle nieskomplikowane, tak aby czas ich wykonywania nie dominował w operacjach na tablicy.

Funkcję mieszającą dobiera się do klucza; inaczej będzie zbudowana funkcja dla tablic przechowujących nazwiska (dowolnie długie łańcuchy znaków), inaczej dla współrzędnych (ciągi liczb rzeczywistych), inaczej dla numerów seryjnych (ciągi liczb i cyfr o określonej długości). Istnieją również funkcje uniwersalne, które można stosować dla dowolnych danych.

W najprostszym przypadku wartość funkcji mieszającej, obliczona dla danego klucza, wyznacza dokładnie indeks szukanej informacji w tablicy. Jeżeli miejsce wskazywane przez obliczony indeks jest puste, to poszukiwanej informacji nie ma w tablicy. W ten sposób wyszukiwanie elementu ma złożoność czasową Jednak w sytuacji tej pojawia się problem kolizji, to znaczy przypisania przez funkcję mieszającą tej samej wartości dwóm różnym kluczom.

Jednak jeżeli dane, które mają być przechowywane w tablicy mieszającej, są znane zawczasu (np. nazwy państw, miast, słowa kluczowe jakiegoś języka programowania), można posłużyć się doskonałą funkcją mieszającą albo minimalną doskonałą funkcją mieszającą, które nigdy nie spowodują kolizji. Doskonała funkcja mieszająca odwzorowuje kluczy na różne wartości z przedziału gdzie w przypadku funkcji minimalnych zachodzi równość

Istnieją algorytmy, które wyznaczają takie funkcje, np. algorytm Cichelliego, FHCD (oba dla napisów), CHD (dla dowolnych danych). Programy, które znajdują funkcje minimalne to np. gperf lub cmph.

Rozwiązywanie problemu kolizji

W sytuacji gdy wartość funkcji mieszającej obliczonej dla klucza elementu wstawianego do tablicy pokrywa się z wartością funkcji obliczoną dla klucza jakiegoś elementu już znajdującego się w tej tablicy, mówimy o kolizji. Istnieje kilka sposobów rozwiązywania tego problemu. Najprostszym sposobem jest zastąpienie elementu znajdującego się w tablicy przez nowy element lub ewentualnie rezygnacja ze wstawiania nowego elementu. Na ogół jednak wymagane jest, aby oba elementy znalazły się w tablicy, co pociąga za sobą konieczność zastosowania innej metody.

Metoda łańcuchowa

Metoda łańcuchowa polega na przechowywaniu elementów nie bezpośrednio w tablicy, lecz na liście związanej z danym indeksem. Wstawiane elementy dołącza się do jednego z końców listy. Średnia złożoność wyszukiwania jest złożonością liniowego wyszukiwania elementu na liście i zależy od współczynnika wypełnienia listy, czyli stosunku liczby elementów do wielkości tablicy. Ponieważ złożoność pesymistyczna wyszukiwania wynosi czasami zamiast list stosuje się drzewa. Zaletą metody łańcuchowej jest szybkość i prostota usuwania elementów z listy.

Adresowanie otwarte

Inny sposób rozwiązywania problemu kolizji to adresowanie otwarte. W podejściu tym nowy element wstawia się w innym miejscu niż wynikałoby to z wartości funkcji mieszającej. Nowa lokalizacja określana jest przez dodanie do wartości funkcji mieszającej wartości tzw. funkcji przyrostu gdzie oznacza numer próby (to znaczy ile razy wstawienie się nie powiodło ze względu na kolizję). Ze względu na rodzaj funkcji przyrostu wyróżnia się różne metody adresowania otwartego:

  • szukanie liniowe, dla funkcji przyrostu postaci
  • szukanie kwadratowe, dla
  • mieszanie podwójne, dla gdzie jest dodatkową funkcją mieszającą od klucza

W przypadku szukania liniowego może pojawić się problem grupowania, to znaczy koncentracji miejsc zajętych w pewnych zakresach indeksów przy małej zajętości innych obszarów tablicy. Problem ten jest w znacznym stopniu zredukowany w przypadku szukania kwadratowego, chociaż w tej metodzie występuje analogiczny problem grupowania wtórnego, natomiast praktycznie wyeliminowany dla mieszania podwójnego.

Innym kłopotem jest skomplikowanie procesu usuwania elementu, w sytuacji gdy w tablicy znajdują się inne, o tej samej wartości funkcji mieszającej. Wymusza to rozróżnianie trzech stanów elementów tablicy: zajęta, wolna, wolna po usunięciu.

Współczynnik wypełnienia

Współczynnik wypełniania (ang. load factor) jest definiowany jako iloraz liczby elementów zapisanych w tablicy mieszającej do fizycznego rozmiaru tablicy Jeśli rozkład prawdopodobieństwa wartości funkcji skrótu jest jednostajny, wówczas przeciętnie dla elementów wystąpią kolizje.

Przy inicjalizacji tablicy mieszającej podaje się początkowy rozmiar (lub jest ona niejawnie określona przez implementację). Natomiast podczas pracy z tablicą sprawdzany jest aktualny współczynnik wypełnienia i gdy jest za duży, rozmiar fizyczny tablicy zostaje odpowiednio korygowany.

W praktyce przyjmuje się wartość współczynnika na poziomie

Haszowanie kukułcze

Haszowanie kukułcze, zwane też niegramatycznie haszowaniem kukułkowym, rozwiązuje problem kolizji poprzez zastosowanie dwóch tablic i dwóch odpowiadających im funkcji haszujących. Dopóki nie występuje kolizja, dodawane elementy są umieszczane w pierwszej tablicy pod indeksem wyznaczonym przez pierwszą funkcję mieszającą. Jeśli jednak wystąpi kolizja (w miejscu wyznaczonym przez pierwszą funkcję już znajduje się inny obiekt), to wstawiany element jest umieszczany w drugiej tablicy na pozycji wyznaczonej przez drugą funkcję. Jeśli pod tamtym indeksem także znajdował się jakiś obiekt, to zostaje on stamtąd usunięty i dla niego rekurencyjnie zostaje uruchomiona procedura wstawiania, przy czym tym razem zostanie on na siłę wstawiony do pierwszej tablicy. Proces ten jest powtarzany do momentu, w którym przy wstawianiu elementu nie wystąpi kolizja. W przypadku zapętlenia się algorytmu, losowane są nowe funkcje haszujące i wszystkie elementy tablicy zostają ponownie przemieszane. Jeśli został osiągnięty ustalony współczynnik wypełnienia, to przed wybraniem nowych funkcji należy powiększyć rozmiar tablicy mieszającej.

Haszowanie kukułcze gwarantuje odczyt elementu z tablicy w czasie stałym (gdyż wymagane jest jedynie sprawdzenie dwóch indeksów), a przy losowaniu funkcji mieszających z odpowiedniej rodziny, oczekiwany zamortyzowany koszt wstawienia elementu jest również stały[1].

Zastosowania

Tablice mieszające są szeroko stosowane do implementacji wielu algorytmów i aplikacji. Są szeroko stosowane w kompilatorach, interpreterach (szczególnie dynamicznych języków obiektowych, jak Python, Perl, JavaScript, Lua), bazach danych (indeksowanie, łączenie, agregacja / grupowanie), analizie i agregacji danych, trasowaniu (routowaniu), systemach cachowania (pamięć podręczna), monitorowaniu, implementacji zbiorów, mapowań dwukierunkowych (bijekcja), kompresji danych, wyszukiwaniu wzorców i wielu innych.

Większość języków programowania posiada implementację tablicy mieszającej w ramach standardowej biblioteki. Ponadto większość języków interpretowanych, takich jak PHP, Ruby czy Smalltalk posiada specjalną składnię do tworzenia tego typu struktur.

Ciekawym przykładem zastosowania rozproszonej tablicy mieszającej jest protokół Kademlia stosowany w niektórych sieciach typu peer-to-peer.

Przy wyszukiwaniu wzorca w tekście:

Definiujemy

gdzie h() – tablica mieszająca, s – słowo, p – baza (najczęściej przyjmuje się liczbę ~30), q – liczba, przez którą dzielimy (najczęściej 2e9+29)

Funkcję h można obliczać ze wzoru rekurencyjnego

A dla danego podciągu w czasie stałym

Wartość dla dużych wartości wykładnika musimy policzyć zgodnie z arytmetyką modularną, tj. w pseudokodzie:

 tp := 1
 for k := 1 to j-i+1 do
  tp := tp*p
  tp := tp mod q

Wady

Podstawową wadą klasycznych tablic mieszających jest duża złożoność pesymistyczna wyszukiwania, wynosząca Ponadto kosztowne może być także obliczanie wartości dobrej funkcji mieszającej.

Kolejna wada wiąże się z architekturą współczesnych procesorów, które wykorzystują pamięć podręczną. Ponieważ pamięć podręczna przyspiesza odwołania do komórek pamięci operacyjnej, gdy są one zgrupowane blisko siebie, zastosowanie tablicy mieszającej dla zbyt małej liczby elementów może być wolniejsze niż zastosowanie zwykłej tablicy przeszukiwanej sekwencyjnie.

Praktyczne implementacje szybkich tablic mieszających stosują różne techniki hybrydowe, aby zminimalizować lub wyeliminować te problemy.

Zobacz też

Przypisy

Bibliografia

  • Hashowanie. W: Donald Ervin Knuth: Sztuka programowania. T. 3: Sortowanie i wyszukiwanie. Warszawa: Wydawnictwa Naukowo-Techniczne, 2002, s. 552–601. ISBN 83-204-2554-9.
  • Mieszanie. W: Adam Drozdek: Wprowadzenie do kompresji danych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1999, s. 412–450. ISBN 83-204-2303-1.
  • Romuald Jagielski: Tablice rozproszone. Warszawa: Wydawnictwa Naukowo-Techniczne, 1982. ISBN 83-204-0247-6.

Read other articles:

Benzil bromida Skeletal structure of the benzyl bromide molecule 3D structure of the benzyl bromide molecule Nama Nama IUPAC Bromometilbenzena Penanda Nomor CAS 100-39-0 Model 3D (JSmol) Gambar interaktif 3DMet {{{3DMet}}} Nomor EC PubChem CID 7498 Nomor RTECS {{{value}}} CompTox Dashboard (EPA) DTXSID8024658 SMILES BrCC1=CC=CC=C1 Sifat Rumus kimia C7H7Br Massa molar 171,04 g/mol Densitas 1,430 g/cm³ Titik lebur -3 °C Titik didih 198-199 °C &#...

 

Загальний формат для ЄС.(A — код Австрії).Загальний формат для ЄС.(A — код Австрії). Норвезький формат номера з ідентифікацією прапором, подібний до формату ЄС.Норвезький формат номера з ідентифікацією прапором, подібний до формату ЄС. Сербський формат номера тільки �...

 

VetriSutradaraS. A. ChandrasekharProduserP. S. VeerappaDitulis olehS. N. SundarPemeranVijayakanthVijiPenata musikShankar-GaneshSinematograferM. KesavanPenyuntingGautham RajuPerusahaanproduksiP. S. V. PicturesTanggal rilis17 Februari 1984Durasi128 menitNegaraIndiaBahasaTamilVetri (Sukses)adalah sebuah film kejahatan aksi berbahasa Tamil India 1984 yang disutradarai oleh S. A. Chandrasekhar. Vijayakanth memainkan peran utama. Musik film ini dikomposisikan oleh Shankar-Ganesh. Vijay juga m...

HouaïlouWaa Wi Lûû Administration Pays France Collectivité Nouvelle-Calédonie Province Province Nord Aire coutumière Ajië-Aro Maire Mandat Pascal Sawa 2020-2026 Code postal 98816 Code commune 98808 Démographie Populationmunicipale 3 955 hab. (2019 ) Densité 4,2 hab./km2 Ethnie Kanak : 90,1 %Métis : 3,5 %Européens : 3 %Tahitiens : 1,2 %Ni-Vanuatu : 0,3 %Asiatiques : 0,2 %Wallisiens-Futuniens : 0,2 ...

 

Chemical compound RemimazolamClinical dataTrade namesByfavoOther namesCNS-7056[1]AHFS/Drugs.comMonographLicense data EU EMA: by INN US DailyMed: Remimazolam Routes ofadministrationIntravenousATC codeN05CD14 (WHO) Legal statusLegal status CA: Schedule IV DE: Anlage III (Special prescription form required) UK: Under Psychoactive Substances Act US: Schedule IV[2] EU: Rx-only[3][4] Identifiers IUPAC name methyl...

 

Judo – Men's +100 kgat the XVI Paralympic GamesVenueNippon BudokanDate29 August 2021Competitors10 from 10 nationsMedalists Mohammadreza Kheirollahzadeh  Iran Revaz Chikoidze  Georgia Ilham Zakiyev  Azerbaijan Choi Gwang-geun  South Korea←20162024→ Judo at the2020 Summer ParalympicsMenWomen60 kg48 kg66 kg52 kg73 kg57 kg81 kg63 kg90 kg70 kg100 kg+70 kg+100 kgvte The men's +100 kg judo competition at the 2020 Summer Paralympics was held on 29 August 2021...

Musique industrielle Données clés Origines stylistiques Post-punk, krautrock, musique concrète, fluxus, performance artistique, électronique, bruitiste, avant-garde, expérimentale, drone Origines culturelles Milieu des années 1970 ; Royaume-Uni et Allemagne Instruments typiques Synthétiseur, boîte à rythmes, batterie, guitare, guitare basse, clavier, échantillonneur, séquenceur Popularité Underground, malgré le succès de certains groupes Genres dérivés Dark ambient, elec...

 

Giovani si diventaBen Stiller e Naomi Watts in una scena del filmTitolo originaleWhile We're Young Lingua originaleinglese Paese di produzioneStati Uniti d'America Anno2014 Durata97 min Generecommedia, drammatico RegiaNoah Baumbach SceneggiaturaNoah Baumbach ProduttoreNoah Baumbach, Eli Bush, Scott Rudin, Lila Yacoub Casa di produzioneScott Rudin Productions Distribuzione in italianoEagle Pictures FotografiaSam Levy MontaggioJennifer Lame MusicheJames Murphy ScenografiaAdam Stockhausen In...

 

尊敬的拿督赛夫丁阿都拉Saifuddin bin Abdullah国会议员馬來西亞国会下议院英迪拉马哥打现任就任日期2018年7月16日 (2018-07-16)前任法兹阿都拉曼(希盟公正党)多数票10,950(2018) 马来西亚外交部长任期2021年8月30日—2022年11月24日君主最高元首苏丹阿都拉首相依斯迈沙比里副职卡玛鲁丁查化(国盟土团党)前任希山慕丁(国阵巫统)继任赞比里(国阵巫统)任期2018年7月2�...

Supreme court of Sweden Kammarrättens hus (yellow) and the Sparre Palace (white) is the seat of the Supreme Administrative Court of Sweden. Politics of Sweden Basic Laws Instrument of Government Act of Succession Freedom of the Press Act Fundamental Law on Freedom of Expression Monarchy King (list): Carl XVI Gustaf Crown Princess: Victoria Royal family Royal Court Marshal of the Realm: Fredrik Wersäll Executive Government: Kristersson cabinet Prime Minister (list): Ulf Kristersson Deputy Pr...

 

  لمعانٍ أخرى، طالع سلطاني (توضيح). يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مارس 2016)سلطانيةمعلومات عامةالبلد الدولة العثمانية تعديل - تعديل مصدري - تعد�...

 

This is a list of Oregon judges that have served within the confines of the United States in the state of Oregon, as well as people from Oregon that have served in federal courts outside of the state. These include judges that served prior to statehood on February 14, 1859, including the judges of the Provisional Government of Oregon. Those listed include judges of the Oregon Supreme Court, the Oregon Tax Court, and the Oregon Court of Appeals at the state level. Judges for the United States...

Japan's first overseas military base Japan Self-Defense Force Base Djibouti DjiboutiCoordinates11°33′11″N 43°08′39″E / 11.553109°N 43.1442278°E / 11.553109; 43.1442278TypeJapan Self-Defense Force BaseSite informationOwnerJapan Self-Defense ForceSite historyBuilt2011Garrison informationGarrison600 soldiers (2016)[1] The Japan Self-Defense Force Base Djibouti (Japanese: ジブチ共和国における自衛隊拠点, Hepburn: Jibuchi Kyouwakoku ni oker...

 

إبراهيم العلج باي معلومات شخصية تعديل مصدري - تعديل   إبراهيم العلج باي هو باي قسنطينة وحاكم بايلك الشرق ضمن أيالة الجزائر في العهد العثماني. امتد حكمه بين سنتي 1703 و1707 ليخلفه فيما بعد حمودة باي.[1] المراجع ^ تاريخ الحكام والسلالات الحاكمة بايات الشرق في الجزائر نسخة مح...

 

Every Time We Say GoodbyePoster rilis teatrikalSutradaraMoshé MizrahiProduser Sharon Harel Jacob Kotzky Ditulis oleh Moshé Mizrahi Rachel Fabien Leah Appet Pemeran Tom Hanks Cristina Marsillach Benedict Taylor Anat Atzmon Gila Almagor Penata musikPhilippe SardePerusahaanproduksi Delphi V Productions TriStar Pictures DistributorTriStar PicturesTanggal rilis 14 November 1986 (1986-11-14) Durasi95 menitNegaraAmerika SerikatBahasa Inggris Judezmo Anggaran$3.7 jutaPendapatankotor$278,...

People identified with the country Panama For information on the population of Panama, see Demographics of Panama. Ethnic group PanamaniansPanameñosFlag of PanamaTotal population Panama          4,279 millionRegions with significant populations United States99,764[1] Costa Rica13,711[1] Spain5,730[1] Colombia3,123[1] Canada2,814[1] Mexico1,767[1] Italy1,10...

 

Nationalparks in Tansania (Tansania) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Lage der Nationalparks in Tansania In Tansania gibt es 22 Nationalparks, die von der Tansanischen National-Park-Organisation (TANAPA) anerkannt wurden.[1] Inhaltsverzeichnis 1 Geographische Übersicht 2 Geschichte 3 Wirtschaftliche Bedeutung 4 Liste der Nationalparks 4.1 Ehemalige Nationalparks 5 Bilder 6 Siehe auch 7 Weblinks 8 Einzelnachweise Geographische Übersicht Nationalparks und Rese...

 

Richard Cheese and Lounge Against the Machine Richard Cheese and Lounge Against the Machine is een Amerikaanse coverband uit Los Angeles. De naam is een parodie op rockband Rage Against the Machine in combinatie met een grappig bedoelde verwijzing. De Amerikaanse afkorting van Richard is Dick, waarbij Dick Cheese duidt op smegma. De band speelt voornamelijk covers van populaire rockbands en rappers en geven hier een eigen muzikale draai aan door er een vrolijk jazz- of loungenummer van te mak...

Seven mathematical problems with a US$1 million prize for each solution This article is about the math prizes. For the technology prize, see Millennium Technology Prize. Millennium Prize Problems Birch and Swinnerton-Dyer conjecture Hodge conjecture Navier–Stokes existence and smoothness P versus NP problem Poincaré conjecture (solved) Riemann hypothesis Yang–Mills existence and mass gap vte The Millennium Prize Problems are seven well-known complex mathematical problems selected by the ...

 

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages) The topic of this article may not meet Wikipedia's general notability guideline. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirect...