⚡ Une affectation comme x ← x + 1 modifie la valeur de x et ne constitue pas une égalité mathématique.
⚡ Une boucle tant que peut ne jamais s’exécuter, tandis qu’une boucle répéter...jusqu’à s’exécute au moins une fois.
Précondition → invariant → terminaison → postcondition
★ À maîtriser
🧮 Formule — L’ordre croissant usuel des complexités est O(1), O(log n), O(n), O(n log n), O(n²), O(n³), O(2ⁿ) puis O(n!).
⚡ O(g) est une borne supérieure, Ω(g) une borne inférieure et Θ(g) une croissance précise à constante près.
Compléments
🧮 Formule — Les récurrences T(n)=T(n−1)+O(1), T(n)=T(n/2)+O(1), T(n)=2T(n/2)+O(n) et T(n)=2T(n−1)+O(1) donnent respectivement O(n), O(log n), O(n log n) et O(2ⁿ).
⚡ Un TAD décrit les opérations et leur comportement, tandis qu’une structure de données est une implémentation concrète de ce TAD.
Coût dominant, opération critique
★ À maîtriser
🧮 Formule — Dans un tableau dynamique, l’ajout en fin coûte O(1) amorti, tandis qu’une insertion ou suppression au milieu coûte O(n) à cause des décalages.
🧮 Formule — Avec les préfixes cumulés P[0]=0 et P[i+1]=P[i]+A[i], la somme A[l..r] vaut P[r+1]−P[l] et se calcule en O(1) après un prétraitement O(n).
⚡ Une liste chaînée permet l’insertion après un nœud connu en O(1), mais l’accès au iᵉ nœud et la recherche coûtent O(n).
⚡ Une pile traite le dernier élément arrivé en premier, une file le premier arrivé en premier et une deque permet les opérations aux deux extrémités.
Compléments
🔄 Processus — La détection de cycle de Floyd utilise un pointeur lent et un pointeur rapide en O(n) temps et O(1) mémoire.
Indice, lien, extrémité
★ À maîtriser
⚡ Des clés égales produisent le même hash, mais deux hashes égaux n’impliquent pas que les clés soient égales.
⚡ La recherche linéaire fonctionne sur des données triées ou non en O(n) dans le pire cas, tandis que la recherche binaire exige un tableau trié et un accès direct pour fonctionner en O(log n).
⚡ Le tri par insertion est adapté aux petites données ou aux séquences presque triées, le tri fusion garantit O(n log n) et la stabilité, tandis que le tri rapide a un pire cas O(n²).
Compléments
🧮 Formule — Le facteur de charge d’une table de hachage est α=n/m, où n est le nombre de clés et m la capacité.
🧮 Formule — Le tri par comptage coûte O(n+k) et convient lorsque l’univers des valeurs, de taille k, reste petit par rapport à n.
Clé, ordre, stabilité
🔄 Processus — Une recette de programmation dynamique consiste à définir l’état minimal, la transition, les cas de base, le mode de calcul, l’ordre de calcul et éventuellement la reconstruction.
Cas de base → sous-problèmes
★ À maîtriser
⚡ La profondeur est la distance entre la racine et un nœud, tandis que la hauteur est le plus long chemin d’un nœud vers une feuille.
🧮 Formule — Dans un ABR, la recherche, l’insertion et la suppression coûtent O(h), soit O(log n) si l’arbre est équilibré et O(n) s’il est dégénéré.
Compléments
⚡ Un trie traite un mot de longueur L en O(L), un segment tree traite une requête ou une mise à jour d’intervalle en O(log n), et un B+ arbre favorise les requêtes par intervalle sur disque.
Racine → branches → feuilles
★ À maîtriser
⚡ Une matrice d’adjacence utilise O(V²) mémoire et teste une arête en O(1), tandis qu’une liste d’adjacence utilise O(V+E) mémoire et convient mieux aux graphes clairsemés.
⚡ BFS utilise une file et explore par niveaux, alors que DFS utilise une pile ou la récursion et explore en profondeur.
🧮 Formule — Avec une liste d’adjacence, BFS et DFS coûtent O(V+E) en temps et O(V) en mémoire.
📌 Un tri topologique n’existe que pour un DAG, et l’algorithme de Kahn utilise les degrés entrants et une file.
Compléments
🧮 Formule — Dans un graphe non orienté, la somme des degrés vaut 2E, tandis que dans un graphe orienté la somme des degrés entrants et celle des degrés sortants valent chacune E.
BFS en largeur, DFS en profondeur
★ À maîtriser
⚡ BFS convient aux arêtes de même coût, Dijkstra aux poids non négatifs, Bellman-Ford autorise les poids négatifs et détecte les cycles négatifs atteignables.
🧮 Formule — Les complexités de Dijkstra avec tas, Bellman-Ford et Floyd-Warshall sont respectivement O((V+E)log V), O(VE) et O(V³), avec O(V²) mémoire pour Floyd-Warshall.
⚡ Prim ajoute à un arbre l’arête sortante la moins chère, tandis que Kruskal trie les arêtes et ajoute celles qui ne créent pas de cycle grâce à Union-Find.
Compléments
🧮 Formule — Union-Find fournit find et union, et la compression de chemin combinée au rang donne un coût amorti O(α(n)).
Relaxer ou connecter
★ À maîtriser
⚡ Le diviser-régner divise puis combine, le glouton choisit localement de manière irréversible avec une preuve nécessaire, et la programmation dynamique réutilise des sous-solutions.
🧮 Formule — KMP coûte O(n+m), Kadane O(n), LCS et la distance d’édition O(nm), LIS O(n log n) et le sac à dos 0/1 O(nC).
⚡ Un tas de taille k trouve un top-k en O(n log k), tandis que Quickselect trouve le kᵉ élément en O(n) moyen et O(n²) dans le pire cas sans trier toute la collection.
Compléments
⚡ Deux pointeurs, fenêtre glissante, préfixes cumulés, pointeur lent/rapide, pile monotone, recherche sur réponse, sweep line, masques de bits et meet-in-the-middle sont des techniques adaptées respectivement aux tableaux, intervalles, agrégats, cycles, prochains maxima, prédicats monotones, événements, petits ensembles d’états et divisions en deux moitiés.
Diviser, choisir, mémoriser
Structures et opérations dominantes
| Besoin | Structure | Coût clé |
|---|---|---|
| Accès par indice | Tableau | O(1) |
| Insertion locale | Liste chaînée | O(1) si le nœud est connu |
| Dernier arrivé | Pile | O(1) aux extrémités |
| Premier arrivé | File | O(1) aux extrémités |
| Clé-valeur | Hachage | O(1) moyen |
| Minimum répété | Tas | O(log n) |
Metti alla prova le tue conoscenze su Algorithmique et structures de données con 33 domande a scelta multipla con correzioni dettagliate.
1. Quel énoncé décrit correctement un algorithme ?
2. Lors de la conception d’une preuve par invariants, que doit être un invariant de boucle ?
Memorizza i concetti chiave di Algorithmique et structures de données con 69 flashcard interattive.
Qu'est-ce qu'un algorithme ?
Une suite finie, ordonnée et non ambiguë d’instructions transformant des entrées en sorties.
Qu'est-ce qui différencie une affectation d'une égalité mathématique ?
L'affectation modifie la valeur d'une variable, contrairement à une égalité mathématique.
Qu'est-ce qu'un invariant dans une boucle ?
Une propriété qui reste vraie à chaque itération de la boucle.
Importa il tuo corso e l'AI genera schede, quiz e flashcard in 30 secondi.
Generatore di schede