Tablice haszujące

Struktury danych i algorytmy w Pythonie

Miriam Antona

Software engineer

Definicja

  • Przechowuje kolekcję elementów
  • Pary klucz-wartość

      lasagna: 14.75
      moussaka: 21.15
      sushi: 16.05
    
  • Niemal każdy język programowania ma wbudowaną tablicę haszującą:

    • hashe, mapy haszujące, słowniki, tablice asocjacyjne
    • Python: słowniki
Struktury danych i algorytmy w Pythonie

Struktura

  • Każda pozycja: slot/bucket

Schematyczna reprezentacja pustej tablicy haszującej.

Struktury danych i algorytmy w Pythonie

Funkcje haszujące

Schematyczna reprezentacja pustej tablicy haszującej. Cena lasagne została wstawiona na piątej pozycji.

Struktury danych i algorytmy w Pythonie

Funkcje haszujące

Schematyczna reprezentacja tablicy haszującej ze słowami "Funkcja haszująca" na środku strzałki mapującej słowo "Lasagna" na wartość na piątej pozycji.

  • Za każdym razem, gdy stosowana jest funkcja haszująca
    • musi zwracać tę samą wartość dla tych samych danych wejściowych
Struktury danych i algorytmy w Pythonie

Wyszukiwanie

Schematyczna reprezentacja tablicy haszującej z kilkoma wartościami.

  • Znajdź "lasagna"
    • hash("lasagna") -> 5
Struktury danych i algorytmy w Pythonie

Wyszukiwanie

Schematyczna reprezentacja tablicy haszującej z kilkoma wartościami. Wartość na piątej pozycji jest zaznaczona na zielono.

  • Znajdź "lasagna"
    • hash("lasagna") -> 5
    • zwróć 14,75
  • $O(1)$
Struktury danych i algorytmy w Pythonie

Kolizje

  • Funkcje haszujące mogą zwracać ten sam wynik dla różnych danych wejściowych
  • hash("moussaka") -> 1

Schematyczna reprezentacja tablicy haszującej z kilkoma wartościami. Wartość na pierwszej pozycji jest zaznaczona na żółto.

  • wstaw: moussaka -> 21,15
  • Kolizja!
    • wymaga rozwiązania
    • kilka technik
Struktury danych i algorytmy w Pythonie

Słownik Pythona

  • Pusty słownik
my_empty_dictionary = {}
  • Słownik z elementami
my_menu = {
    'lasagna': 14.75,
    'moussaka': 21.15,
    'sushi': 16.05
}
Struktury danych i algorytmy w Pythonie

Słownik Pythona – metoda get

print(my_menu['sushi'])
16.05
print(my_menu['paella'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'paella'
print(my_menu.get('paella'))
None
Struktury danych i algorytmy w Pythonie

Słownik Pythona – items, keys i values

  • Pobierz elementy
print(my_menu.items())
dict_items([('lasanga', 14.75), 
            ('moussaka', 21.15),
            ('sushi', 16.05)])
  • Pobierz klucze
print(my_menu.keys())
dict_keys(['lasanga', 'moussaka', 'sushi'])
  • Pobierz wartości
print(my_menu.values())
dict_values([14.75, 21.15, 16.05])
Struktury danych i algorytmy w Pythonie

Słownik Pythona – dodawanie

my_menu['samosas'] = 13

print(my_menu.items())
dict_items([('lasanga', 14.75), ('moussaka', 21.15), ('sushi', 16.05), ('samosas', 13)])
Struktury danych i algorytmy w Pythonie

Słownik Pythona – modyfikowanie

print(my_menu.get('sushi'))
16.05
my_menu['sushi'] = 20

print(my_menu.get('sushi'))
20
Struktury danych i algorytmy w Pythonie

Słownik Pythona – usuwanie

  • Usuwa cały słownik
del my_menu
  • Usuwa parę klucz-wartość
del my_menu["sushi"]
  • Czyści słownik
my_menu.clear()
Struktury danych i algorytmy w Pythonie

Słownik Pythona – iteracja

for key, value in my_menu.items():
  print(f"\nkey: {key}")
  print(f"value: {value}")
key: lasagna
value: 14.75

key: moussaka
value: 21.15

key: sushi
value: 16.05
Struktury danych i algorytmy w Pythonie

Słownik Pythona – iteracja

for dish in my_menu:
  print(dish)
lasagna
moussaka
sushi
for prices in my_menu.values():
  print(prices)
14.75
21.15
16.05
Struktury danych i algorytmy w Pythonie

Słownik Pythona – słowniki zagnieżdżone

  • Zagnieżdżony słownik
my_menu = {
  'sushi' : {
    'price' : 19.25,
    'best_served' : 'cold'
  },
  'paella' : {
    'price' : 15,
    'best_served' : 'hot'
  }
}
Struktury danych i algorytmy w Pythonie

Czas na ćwiczenia!

Struktury danych i algorytmy w Pythonie

Preparing Video For Download...