Algorithmes de tri — 03 — Le tri par fusion, diviser pour régner
Le tri par fusion (merge sort) : découper, trier les moitiés, fusionner. Pourquoi il garantit O(n log n) dans tous les cas, son coût mémoire et sa stabilité.
21 articles sur le thème "algorithmes".
Le tri par fusion (merge sort) : découper, trier les moitiés, fusionner. Pourquoi il garantit O(n log n) dans tous les cas, son coût mémoire et sa stabilité.
Pourquoi un code rapide sur 100 lignes devient inutilisable sur 1 million. Introduction à la complexité algorithmique comme dette technique qui dort.
Synthèse de la série : un arbre de décision pour choisir entre dichotomie, deux pointeurs, fenêtre glissante et sommes préfixes face à un problème de tableau.
Au-delà de la valeur exacte : trouver la borne inférieure/supérieure avec la dichotomie, et la technique de recherche binaire sur l'espace des réponses.
Les deux tris quadratiques fondamentaux : sélection et insertion. Principe, code en TypeScript et Python, complexité, stabilité, et pourquoi l'insertion est meilleure.
Battre la barrière O(n log n) : le tri par comptage et le tri radix trient en O(n) sans comparer les éléments. Conditions, principe, code et limites.
Tous les langages ont un tri intégré. Pourquoi comprendre les algorithmes de tri reste utile : choisir, déboguer, et raisonner sur la complexité.
Le tri par tas : utiliser un tas binaire pour trier en O(n log n) garanti et en place. Principe du tas, tamisage, et comparaison avec fusion et rapide.
Le pattern des sommes préfixes : précalculer des cumuls pour répondre à des requêtes de somme sur une plage en O(1). Extension en 2D et différence avec la fenêtre.
Le pattern de la fenêtre glissante : résoudre les problèmes de sous-tableaux et sous-chaînes contigus en O(n) au lieu de O(n²), avec fenêtre fixe et variable.
Le tri à bulles : principe, code, pourquoi il est O(n²), et pourquoi il sert surtout d'exemple pédagogique plutôt que d'outil de production.
Le pattern des deux pointeurs : résoudre en O(n) des problèmes de paires, de palindromes et de fusion sur des tableaux triés, sans mémoire supplémentaire.
Comprendre O(1), O(log n), O(n), O(n log n), O(n²) et O(2ⁿ) avec des exemples de code et une intuition de la vitesse de croissance.
Introduction aux graphes : sommets et arêtes, vocabulaire (orienté, pondéré, cyclique), et pourquoi voir un problème comme un graphe ouvre des solutions toutes faites.
Synthèse de la série graphes : reconnaître un problème de graphe dans du code réel (dépendances, réseaux, recommandations) et choisir le bon algorithme.
La recherche dichotomique (binaire) : O(log n) sur un tableau trié. Implémentation correcte, le piège du calcul du milieu, et les erreurs de bornes classiques.
Introduction aux techniques de recherche sur tableaux : pourquoi le parcours naïf est souvent un O(n²) évitable, et les patterns qui le remplacent.
Le tri rapide : pivot, partition, récursion. Pourquoi il est rapide en moyenne (O(n log n)), pourquoi son pire cas est O(n²), et comment choisir un bon pivot.
Déterminer la complexité d'un code : compter les opérations, garder le terme dominant, ignorer les constantes, et distinguer cas pire, moyen et meilleur.
Synthèse : stabilité et tri en place, et l'algorithme réel derrière Array.sort() et sorted() — Timsort, un hybride fusion + insertion. Pièges courants du tri.
Introduction à la série structures de données : pourquoi chaque structure est un compromis, ce que la série construit, et le lien avec la complexité algorithmique.