Tables de hachage

Structures de données et algorithmes en Python

Miriam Antona

Software engineer

Définition

  • Stocke une collection d’éléments
  • Paires clé-valeur

      lasagna: 14.75
      moussaka: 21.15
      sushi: 16.05
    
  • Presque tous les langages ont une table de hachage intégrée :

    • hashes, hash maps, dictionaries, associative arrays
    • Python : dictionaries
Structures de données et algorithmes en Python

Structure

  • Chaque position : emplacement/bucket

Représentation schématique d’une table de hachage vide.

Structures de données et algorithmes en Python

Fonctions de hachage

Représentation schématique d’une table de hachage vide. Le prix de la lasagne a été inséré à la cinquième position.

Structures de données et algorithmes en Python

Fonctions de hachage

Représentation schématique d’une table de hachage avec les mots « Hash function » au milieu d’une flèche qui associe le mot « Lasagna » à la valeur en cinquième position.

  • À chaque application d’une fonction de hachage
    • elle doit renvoyer la même valeur pour la même entrée
Structures de données et algorithmes en Python

Recherches

Représentation schématique d’une table de hachage avec quelques valeurs.

  • Rechercher « lasagna »
    • hash("lasagna") -> 5
Structures de données et algorithmes en Python

Recherches

Représentation schématique d’une table de hachage avec quelques valeurs. La valeur à la cinquième position est en vert.

  • Rechercher « lasagna »
    • hash("lasagna") -> 5
    • renvoie 14,75
  • $O(1)$
Structures de données et algorithmes en Python

Collisions

  • Les fonctions de hachage peuvent renvoyer la même sortie pour des entrées différentes
  • hash("moussaka") -> 1

Représentation schématique d’une table de hachage avec quelques valeurs. La valeur à la première position est en jaune.

  • insérer : moussaka -> 21,15
  • Collision !
    • doit être résolue
    • plusieurs techniques
Structures de données et algorithmes en Python

Dictionnaire Python

  • Dictionnaire vide
my_empty_dictionary = {}
  • Dictionnaire avec éléments
my_menu = {
    'lasagna': 14.75,
    'moussaka': 21.15,
    'sushi': 16.05
}
Structures de données et algorithmes en Python

Dictionnaire Python - 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
Structures de données et algorithmes en Python

Dictionnaire Python - items, keys & values

  • Obtenir les éléments
print(my_menu.items())
dict_items([('lasanga', 14.75), 
            ('moussaka', 21.15),
            ('sushi', 16.05)])
  • Obtenir les clés
print(my_menu.keys())
dict_keys(['lasanga', 'moussaka', 'sushi'])
  • Obtenir les valeurs
print(my_menu.values())
dict_values([14.75, 21.15, 16.05])
Structures de données et algorithmes en Python

Dictionnaire Python - insertion

my_menu['samosas'] = 13

print(my_menu.items())
dict_items([('lasanga', 14.75), ('moussaka', 21.15), ('sushi', 16.05), ('samosas', 13)])
Structures de données et algorithmes en Python

Dictionnaire Python - modifier

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

print(my_menu.get('sushi'))
20
Structures de données et algorithmes en Python

Dictionnaire Python - supprimer

  • Supprime un dictionnaire complètement
del my_menu
  • Retire une paire clé-valeur
del my_menu["sushi"]
  • Vide un dictionnaire
my_menu.clear()
Structures de données et algorithmes en Python

Dictionnaire Python - itérer

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
Structures de données et algorithmes en Python

Dictionnaire Python - itérer

for dish in my_menu:
  print(dish)
lasagna
moussaka
sushi
for prices in my_menu.values():
  print(prices)
14.75
21.15
16.05
Structures de données et algorithmes en Python

Dictionnaire Python - dictionnaires imbriqués

  • Dictionnaire imbriqué
my_menu = {
  'sushi' : {
    'price' : 19.25,
    'best_served' : 'cold'
  },
  'paella' : {
    'price' : 15,
    'best_served' : 'hot'
  }
}
Structures de données et algorithmes en Python

Passons à la pratique !

Structures de données et algorithmes en Python

Preparing Video For Download...