Tout système d'IA doit stocker et retrouver des données - rapidement. Qu'il s'agisse d'une liste de pixels, d'un vocabulaire de 50 000 mots ou de millions de préférences utilisateur, le choix de la structure de données détermine la vitesse de réflexion de votre IA.
Deux structures dominent : les tableaux (arrays) et les hash maps. Maîtrisez-les, et vous avez la base de presque tout pipeline d'IA.
Un tableau est simplement une liste numérotée d'éléments stockés côte à côte en mémoire. Chaque élément possède un index - sa position, en commençant à zéro.
index: 0 1 2 3 4
value: ["cat", "dog", "bird", "fish", "frog"]
Les éléments étant contigus, on accède directement à n'importe quelle position. Besoin de l'élément 3 ? C'est immédiat. C'est un accès en O(1) : le temps est le même que le tableau contienne 10 ou 10 millions d'éléments.
Insérer ou supprimer un élément au milieu coûte cher. Tous les éléments suivants doivent se décaler. C'est du O(n) - plus il y a d'éléments, plus c'est long.
Si vous aviez une playlist de 10 000 titres et vouliez insérer un morceau en position 5, chaque titre à partir de la position 5 devrait se décaler. Comment un service de streaming pourrait-il gérer cela sans ralentir ?
Une hash map (aussi appelée dictionnaire ou table de hachage) stocke les données sous forme de paires clé-valeur. Au lieu d'accéder par index, on accède par une clé significative.
Sign in to join the discussion
word_counts = {
"hello": 42,
"world": 37,
"AI": 156
}
Besoin du compteur pour "AI" ? La hash map utilise une hash function pour convertir la clé en index en coulisses. Résultat : un temps de recherche moyen en O(1) - comme les tableaux, mais avec des noms au lieu de numéros.
Les dictionnaires Python sont des hash maps. Quand ChatGPT comptabilise les fréquences de mots pendant l'entraînement, il utilise des structures similaires pour suivre des milliards d'occurrences à travers tout le texte d'Internet.
| Opération | Tableau | Hash Map | |-----------|---------|----------| | Accès par index | O(1) ⚡ | N/A | | Accès par clé | O(n) 🐢 | O(1) ⚡ | | Insertion en fin | O(1) ⚡ | O(1) ⚡ | | Insertion au milieu | O(n) 🐢 | N/A | | Recherche d'une valeur | O(n) 🐢 | O(1) ⚡ |
Retenez : O(1) signifie « instantané, quelle que soit la taille » et O(n) signifie « plus les données sont volumineuses, plus c'est lent ».
Vous avez 100 000 profils utilisateur et devez trouver un utilisateur par son nom d'utilisateur. Quelle structure est la plus rapide ?
L'un des patrons les plus utiles en entretien comme en IA est le comptage d'occurrences :
counts = {}
for each word in text:
if word in counts:
counts[word] = counts[word] + 1
else:
counts[word] = 1
Un seul passage dans le texte donne la fréquence de chaque mot. Les modèles de langage utilisent exactement cette approche (à grande échelle) pour comprendre quels mots comptent le plus.
Étant donné un tableau de nombres et une cible, trouvez deux nombres dont la somme égale la cible. L'approche naïve vérifie toutes les paires - O(n²). L'approche astucieuse utilise une hash map :
seen = {}
for each number in array:
complement = target - number
if complement in seen:
return [seen[complement], current_index]
seen[number] = current_index
Un seul passage, en O(n). La hash map mémorise ce qu'on a déjà vu.
Pourquoi l'approche par hash map du two-sum est-elle plus rapide que la vérification de toutes les paires ?
Un moteur de recommandation doit vérifier si un utilisateur a déjà vu un film avant de le suggérer. Stockeriez-vous l'historique dans un tableau ou une hash map ? Quels compromis vous viennent à l'esprit ?
Un modèle d'IA stocke des word embeddings sous forme de tableaux de 300 nombres chacun. Pourquoi les tableaux sont-ils un bon choix ici ?