Quand vous cherchez sur Google, les résultats apparaissent en moins d'une seconde - classés du plus au moins pertinent. Quand Netflix recommande des films, il trie des milliers de titres par probabilité de vous plaire. Derrière chaque recherche rapide et chaque liste classée se cache un algorithme de tri ou de recherche.
Des données triées sont des données puissantes. Une fois une liste ordonnée, on peut :
Le tri à bulles parcourt la liste de façon répétée, comparant les éléments adjacents et les échangeant s'ils sont dans le mauvais ordre. Les plus grandes valeurs « remontent » vers la fin.
[5, 3, 8, 1, 2]
↕
[3, 5, 8, 1, 2] → swapped 5 and 3
[3, 5, 1, 8, 2] → swapped 8 and 1
[3, 5, 1, 2, 8] → swapped 8 and 2
... keep going until no swaps needed
Complexité : O(n²) - pour chacun des n éléments, on peut comparer avec tous les autres. Avec 1 000 éléments, c'est jusqu'à 1 000 000 de comparaisons. Avec 1 000 000 d'éléments ? Un billion. Impraticable pour les charges IA.
Si le tri à bulles effectue environ n² comparaisons, combien de fois serait-il plus lent de trier un million d'éléments par rapport à mille ? Pensez au ratio : (1 000 000)² vs (1 000)². C'est un million de fois plus lent - juste pour mille fois plus de données.
Le tri fusion adopte une approche plus astucieuse : couper la liste en deux, trier chaque moitié, puis fusionner les deux moitiés triées.
[5, 3, 8, 1, 2, 7, 4, 6]
split
[5, 3, 8, 1] [2, 7, 4, 6]
split split
[5, 3] [8, 1] [2, 7] [4, 6]
↓ ↓ ↓ ↓
[3, 5] [1, 8] [2, 7] [4, 6]
merge merge
[1, 3, 5, 8] [2, 4, 6, 7]
merge
[1, 2, 3, 4, 5, 6, 7, 8]
Sign in to join the discussion
Complexité : O(n log n) - drastiquement plus rapide. Pour un million d'éléments, c'est environ 20 millions de comparaisons au lieu d'un billion. C'est ce type d'algorithme qui rend les vrais systèmes d'IA possibles.
Le tri natif de Python utilise Timsort - un hybride combinant tri fusion et tri par insertion. Inventé par Tim Peters en 2002, il est maintenant utilisé en Python, Java et Android. Il est conçu pour bien fonctionner sur des données réelles souvent partiellement triées.
| Éléments | Bubble Sort (O(n²)) | Merge Sort (O(n log n)) | |----------|---------------------|-------------------------| | 100 | 10 000 ops | ~700 ops | | 10 000 | 100 000 000 ops | ~130 000 ops | | 1 000 000 | 1 000 000 000 000 ops | ~20 000 000 ops |
La différence n'est pas théorique - c'est la différence entre « fini en une seconde » et « fini la semaine prochaine ».
Pourquoi le tri fusion est-il préféré au tri à bulles pour les grands jeux de données en IA ?
Imaginez chercher « Smith » dans un annuaire. Vous ne commenceriez pas à la page 1 en lisant chaque nom. Vous ouvririez au milieu, verriez où vous en êtes, et sauteriez dans la bonne moitié. Puis vous recommenceriez.
C'est la recherche binaire - et elle ne fonctionne que sur des données triées.
sorted_list = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
target = 23
Step 1: Middle = 16 → 23 > 16, search right half
Step 2: Middle = 38 → 23 < 38, search left half
Step 3: Middle = 23 → Found it!
Complexité : O(log n). Dans une liste triée d'un million d'éléments, la recherche binaire trouve n'importe quel élément en 20 étapes maximum. Une recherche linéaire prendrait jusqu'à un million d'étapes.
Une base de données triée contient 1 000 000 d'enregistrements. Combien de comparaisons la recherche binaire nécessite-t-elle dans le pire cas ?
Quand Google traite votre requête, il note chaque page pertinente et les trie par pertinence. Les 10 premiers résultats apparaissent en page 1. Sans tri efficace, cela prendrait des minutes.
Netflix calcule un « score de correspondance » pour des milliers de titres, puis les trie pour vous montrer les meilleurs en premier. L'algorithme de tri affecte directement ce que vous voyez sur votre écran d'accueil.
Cet algorithme classique d'IA trouve les K éléments les plus similaires à une entrée donnée. Il calcule les distances, puis trie partiellement pour trouver les K plus petites.
On n'a pas toujours besoin de tout trier. Si vous ne voulez que les 10 meilleurs résultats parmi un million, un tri partiel ou un tas les trouve en O(n log k) - bien plus vite qu'un tri complet.
Avant l'entraînement, on trie souvent les données pour créer des lots équilibrés - un mélange d'exemples faciles et difficiles, ou une distribution équilibrée de catégories.
| Scénario | Meilleur choix | Pourquoi | |----------|---------------|----------| | Trouver un élément par clé | Hash map | Recherche en O(1) | | Trouver les 10 meilleurs | Tri | Besoin de résultats ordonnés | | Vérifier l'existence | Hash map | O(1) vs O(log n) | | Obtenir les éléments en ordre | Tri | Les hash maps n'ont pas d'ordre | | Requêtes d'intervalle | Tableau trié + binary search | Les hash maps ne gèrent pas les intervalles |
Un service de streaming musical doit afficher vos « 50 titres les plus écoutés ». Trieriez-vous tout l'historique d'écoute, ou maintiendriez-vous une structure qui connaît toujours le top 50 ?
Google traite plus de 8,5 milliards de recherches par jour. Chaque recherche implique le tri et le classement de centaines de résultats en millisecondes. L'efficacité des algorithmes de tri impacte directement la consommation électrique des centres de données de Google - de meilleurs algorithmes économisent littéralement des mégawatts.
Quand la recherche binaire ne serait-elle PAS appropriée ?