logo

Haszowanie w strukturze danych

Haszowanie to podstawowa struktura danych, która skutecznie przechowuje i pobiera dane w sposób umożliwiający szybki dostęp. Polega na mapowaniu danych na określony indeks w tabeli skrótów za pomocą a funkcja skrótu który umożliwia szybkie odnalezienie informacji na podstawie jej klucza. Metoda ta jest powszechnie stosowana w bazach danych, C systemy bolące oraz różne aplikacje programistyczne optymalizujące operacje wyszukiwania i odzyskiwania.

Struktury danych – haszowanie

pętla do i while w Javie

Spis treści



Jak to działa:

  1. Funkcja skrótu: Podajesz elementy danych do funkcji skrótu.
  2. Kod skrótu: Funkcja skrótu przetwarza dane i podaje unikalny kod skrótu.
  3. Tabela mieszająca: Kod skrótu wskazuje następnie konkretną lokalizację w tabeli skrótów.

Funkcja skrótu

The funkcja skrótu jest funkcją, która przyjmuje a klucz i zwraca indeks w tablica mieszająca . Celem funkcji skrótu jest równomierne rozmieszczenie kluczy w tablicy mieszającej, minimalizując kolizje (gdy dwa klucze są mapowane na ten sam indeks).

Typowe funkcje skrótu obejmują:

  • Metoda podziału: Kluczowy % Rozmiar tabeli mieszającej
  • Metoda mnożenia: (Klucz * Stała) % Rozmiar tablicy mieszającej
  • Uniwersalne haszowanie: Rodzina funkcji skrótu zaprojektowana w celu minimalizacji kolizji

Co to jest kolizja skrótu?

Kolizja skrótu ma miejsce, gdy dwa różne klucze są mapowane na ten sam indeks w tabeli skrótów. Może się to zdarzyć nawet przy dobrej funkcji skrótu, szczególnie jeśli tablica mieszająca jest pełna lub klucze są podobne.

Przyczyny kolizji skrótów:

  • Słaba funkcja skrótu: Funkcja mieszająca, która nie rozdziela kluczy równomiernie w tablicy mieszającej, może prowadzić do większej liczby kolizji.
  • Wysoki współczynnik obciążenia: Wysoki współczynnik obciążenia (stosunek kluczy do rozmiaru tablicy mieszającej) zwiększa prawdopodobieństwo kolizji.
  • Podobne klucze: Klucze o podobnej wartości lub strukturze częściej kolidują.

Techniki rozwiązywania kolizji

Istnieją dwa rodzaje technik rozwiązywania kolizji:

  1. Otwarte adresowanie:
    • Sondowanie liniowe: Wyszukaj kolejno puste miejsce
    • Sondowanie kwadratowe: Wyszukaj puste miejsce za pomocą funkcji kwadratowej
  2. Zamknięte adresowanie:
    • Łańcuch: Przechowuj kolidujące klucze na połączonej liście lub drzewie wyszukiwania binarnego w każdym indeksie
    • Mieszanie z kukułką: Użyj wielu funkcji skrótu do dystrybucji kluczy

Zastosowania haszowania

Tabele skrótów są używane w wielu różnych zastosowaniach, w tym:

  • Bazy danych: Przechowywanie i pobieranie danych w oparciu o unikalne klucze
  • Buforowanie: Przechowywanie często używanych danych w celu szybszego ich wyszukiwania
  • Tabele symboli: Mapowanie identyfikatorów na ich wartości w językach programowania
  • Routing sieciowy: Wyznaczanie najlepszej ścieżki dla pakietów danych

Co to jest haszowanie?
  • Mapowanie indeksu (lub trywialne haszowanie)
  • Oddzielne łańcuchy do obsługi kolizji
  • Otwarte adresowanie do obsługi kolizji
  • Podwójne haszowanie
  • Współczynnik obciążenia i ponowne mieszanie
  • Łatwy problem z haszowaniem

    • Sprawdza, czy tablica jest podzbiorem innej tablicy
    • Suma i przecięcie dwóch połączonych list
    • Mając tablicę A[] i liczbę x, sprawdź parę w A[] z sumą jako x
    • Maksymalna odległość między dwoma wystąpieniami tego samego elementu w tablicy
    • Policz maksymalną liczbę punktów na tej samej linii
    • Najczęstszy element tablicy
    • Znajdź jedyny powtarzający się element pomiędzy 1 a n-1
    • Jak sprawdzić, czy dwa dane zbiory są rozłączne?
    • Nienakładająca się suma dwóch zbiorów
    • Sprawdź, czy dwie tablice są równe, czy nie
    • Znajdź brakujące elementy zakresu
    • Minimalna liczba podzbiorów z odrębnymi elementami
    • Usuń minimalną liczbę elementów, tak aby w obu tablicach nie istniał żaden wspólny element
    • Znajdź pary o podanej sumie tak, aby elementy pary znajdowały się w różnych wierszach
    • Policz pary o podanej sumie
    • Policz czwórki z czterech posortowanych tablic, których suma jest równa danej wartości x
    • Sortuj elementy według częstotliwości
    • Znajdź wszystkie pary (a, b) w tablicy takiej, że a % b = k
    • Grupuj słowa z tym samym zestawem znaków
    • k-ty odrębny (lub niepowtarzający się) element tablicy.

    Średni problem z haszowaniem

    • Znajdź Plan Podróży na podstawie podanej listy biletów
    • Znajdź liczbę pracowników pod każdym pracownikiem
    • Najdłuższa podtablica z sumą podzielną przez k
    • Znajdź największą podtablicę o sumie 0
    • Najdłuższy rosnący kolejny podciąg
    • Policz różne elementy w każdym oknie o rozmiarze k
    • Znajdź podtablicę z podaną sumą | Zestaw 2 (obsługuje liczby ujemne)
    • Implementacja naszej własnej tabeli skrótów z oddzielnym łańcuchem w Javie
    • Implementacja własnej tablicy mieszającej z sondowaniem liniowym z otwartym adresowaniem w C++
    • Minimalne wstawki tworzące palindrom z dozwolonymi permutacjami
    • Maksymalna możliwa różnica dwóch podzbiorów tablicy
    • Sortowanie za pomocą trywialnej funkcji skrótu
    • Najmniejsza podtablica zawierająca k różnych liczb

    Trudny problem z haszowaniem

    • Klonuj drzewo binarne za pomocą losowych wskaźników
    • Największa podtablica z równą liczbą zer i jedynek
    • Wszystkie unikalne trójki, które sumują się do określonej wartości
    • Zapytania o podciągi palindromu
    • Zapytania o zakres dla częstotliwości elementów tablicy
    • Elementy, które należy dodać, aby wszystkie elementy zakresu były obecne w tablicy
    • Cuckoo Hashing – najgorszy przypadek wyszukiwania O(1)!
    • Policz podtablice posiadające łącznie różne elementy takie same jak oryginalna tablica
    • Maksymalna tablica z dwóch podanych tablic, zachowująca tę samą kolejność
    • Znajdź sumę wszystkich unikalnych sum podtablicy dla danej tablicy.
    • Sekwencja Recamana
    • Długość najdłuższego ścisłego podciągu bitonicznego
    • Znajdź wszystkie zduplikowane poddrzewa
    • Znajdź, czy w macierzy binarnej istnieje prostokąt z narożnikami o wartości 1

    Szybkie linki :

    Zalecana:

    • Naucz się struktury danych i algorytmów | Poradnik DSA