Notions de base en algo (Complexité temporelle) Flashcards
(36 cards)
Qu’est-ce que la complexité temporelle ?
Une mesure du temps d’exécution d’un algorithme en fonction de la taille des données d’entrée (n), exprimée avec la notation O.
Que représente la notation O ?
Le comportement asymptotique (pire cas) d’un algorithme, en ignorant les constantes et les termes non dominants.
Comment simplifier O(3n² + 2n + 5) ?
O(n²) (on garde le terme dominant).
Quelle est la complexité d’une boucle for i in range(n) ?
O(n).
Et de deux boucles imbriquées ?
O(n²).
Pourquoi la recherche dichotomique est-elle O(log n) ?
Parce qu’elle divise l’espace de recherche par 2 à chaque étape (log₂n étapes max).
Quel est l’accès à un élément dans un tableau ? Et dans une liste chaînée ?
Tableau : O(1) (accès direct).
Liste chaînée : O(n) (parcours nécessaire).
Pourquoi s += str(i) dans une boucle peut être O(n²) ?
Parce que les strings sont immuables (chaque concaténation crée une nouvelle string, coût total cumulé).
Quelle est la complexité de Fibonacci naïf ? Et avec mémoïsation ?
Naïf : O(2ⁿ) (branchement exponentiel).
Mémoïsation : O(n) (calculs stockés).
Que devient O(n + log n) après simplification ?
O(n) (car n domine log n).
Pourquoi for x in list: list.remove(x) est O(n²) ?
Car remove() est O(n) et est appelé n fois.
Complexité du tri fusion ? Et du tri par sélection ?
Tri fusion : O(n log n).
Tri par sélection : O(n²).
Quelle est la complexité d’un parcours DFS sur un graphe ?
O(n + m) (où n = nœuds, m = arêtes).
Comment analyser la complexité d’un algorithme ?
Compter les opérations dominantes (boucles, récursions).
Tenir compte des structures de données. Simplifier en notation O.
Complexité des opérations suivantes sur un tableau ?
Accès (arr[i]) Recherche d'un élément Insertion/suppression en fin (append(), pop()) Insertion/suppression au milieu
Accès : O(1)
Recherche (non trié) : O(n)
Fin : O(1) (amorti)
Milieu : O(n) (décalage des éléments)
Complexité des opérations suivantes ?
Insertion en tête Recherche d'un élément Accès au i-ème élément
Tête : O(1)
Recherche/Accès : O(n) (parcours nécessaire)
Complexité des opérations ?
Insertion (dict[key] = value) Recherche (key in dict) Suppression (del dict[key])
En moyenne : O(1)
Pire cas (collisions) : O(n)
Complexité de push()/pop() (pile) et enqueue()/dequeue() (file) ?
Toutes : O(1) (implémentation standard avec liste ou deque)
Complexité des opérations suivantes sur les arbres binaires équilibrés ?
Recherche Insertion Suppression
Toutes : O(log n) (hauteur de l’arbre = log n)
Complexité de insert() et extract_min() sur un tas (heap) ?
Les deux : O(log n) (rééquilibrage après opération)
Complexité dans le pire cas ? Et en moyenne ? (Tri Rapide /QuickSort)
Pire cas : O(n²) (mauvais pivot)
Moyenne : O(n log n)
Complexité dans tous les cas pour le Tri Fusion (MergeSort)?
Toujours : O(n log n) (stable et diviser-pour-régner)
Complexité pour un graphe avec n nœuds et m arêtes ? (BFS ou DFS)
BFS/DFS : O(n + m) (visite chaque nœud et arête une fois)
Complexité avec un tas binaire ? Et avec un tas de Fibonacci ?
Tas binaire : O((n + m) log n)
Tas de Fibonacci : O(n log n + m)