Notions de base en algo (Complexité temporelle) Flashcards

(36 cards)

1
Q

Qu’est-ce que la complexité temporelle ?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Que représente la notation O ?

A

Le comportement asymptotique (pire cas) d’un algorithme, en ignorant les constantes et les termes non dominants.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Comment simplifier O(3n² + 2n + 5) ?

A

O(n²) (on garde le terme dominant).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Quelle est la complexité d’une boucle for i in range(n) ?

A

O(n).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Et de deux boucles imbriquées ?

A

O(n²).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Pourquoi la recherche dichotomique est-elle O(log n) ?

A

Parce qu’elle divise l’espace de recherche par 2 à chaque étape (log₂n étapes max).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Quel est l’accès à un élément dans un tableau ? Et dans une liste chaînée ?

A

Tableau : O(1) (accès direct).

Liste chaînée : O(n) (parcours nécessaire).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Pourquoi s += str(i) dans une boucle peut être O(n²) ?

A

Parce que les strings sont immuables (chaque concaténation crée une nouvelle string, coût total cumulé).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quelle est la complexité de Fibonacci naïf ? Et avec mémoïsation ?

A

Naïf : O(2ⁿ) (branchement exponentiel).

Mémoïsation : O(n) (calculs stockés).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Que devient O(n + log n) après simplification ?

A

O(n) (car n domine log n).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Pourquoi for x in list: list.remove(x) est O(n²) ?

A

Car remove() est O(n) et est appelé n fois.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Complexité du tri fusion ? Et du tri par sélection ?

A

Tri fusion : O(n log n).

Tri par sélection : O(n²).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quelle est la complexité d’un parcours DFS sur un graphe ?

A

O(n + m) (où n = nœuds, m = arêtes).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Comment analyser la complexité d’un algorithme ?

A

Compter les opérations dominantes (boucles, récursions).

Tenir compte des structures de données.

Simplifier en notation O.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

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
A

Accès : O(1)

Recherche (non trié) : O(n)

Fin : O(1) (amorti)

Milieu : O(n) (décalage des éléments)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Complexité des opérations suivantes ?

Insertion en tête

Recherche d'un élément

Accès au i-ème élément
A

Tête : O(1)

Recherche/Accès : O(n) (parcours nécessaire)
17
Q

Complexité des opérations ?

Insertion (dict[key] = value)

Recherche (key in dict)

Suppression (del dict[key])
A

En moyenne : O(1)

Pire cas (collisions) : O(n)

18
Q

Complexité de push()/pop() (pile) et enqueue()/dequeue() (file) ?

A

Toutes : O(1) (implémentation standard avec liste ou deque)

19
Q

Complexité des opérations suivantes sur les arbres binaires équilibrés ?

Recherche

Insertion

Suppression
A

Toutes : O(log n) (hauteur de l’arbre = log n)

20
Q

Complexité de insert() et extract_min() sur un tas (heap) ?

A

Les deux : O(log n) (rééquilibrage après opération)

21
Q

Complexité dans le pire cas ? Et en moyenne ? (Tri Rapide /QuickSort)

A

Pire cas : O(n²) (mauvais pivot)

Moyenne : O(n log n)
22
Q

Complexité dans tous les cas pour le Tri Fusion (MergeSort)?

A

Toujours : O(n log n) (stable et diviser-pour-régner)

23
Q

Complexité pour un graphe avec n nœuds et m arêtes ? (BFS ou DFS)

A

BFS/DFS : O(n + m) (visite chaque nœud et arête une fois)

24
Q

Complexité avec un tas binaire ? Et avec un tas de Fibonacci ?

A

Tas binaire : O((n + m) log n)

Tas de Fibonacci : O(n log n + m)
25
Pourquoi s += "a" dans une boucle est O(n²) ?
Strings immuables → copie complète à chaque itération ("a" + "b" + ...). Solution : Utiliser "".join(list) pour O(n).
26
Complexité de list[start:end] ?
O(k) (où k = end - start) → copie des éléments.
27
Complexité de : python for x in list: if x in other_list: # other_list de taille m print(x)
O(n × m) (boucle O(n) × recherche O(m)).
28
Complexité avec l'opération Union-Find optimisée pour l'algo de kruskal?
O(m log n) (où m = arêtes, n = nœuds).
29
Qu’est-ce que la complexité temporelle en cas moyen ?
Le temps d’exécution moyen attendu pour des données aléatoires, calculé en probabilités.
30
Qu’est-ce que la complexité temporelle en meilleur cas ?
Le temps d’exécution minimal possible (scénario idéal, souvent peu réaliste).
31
Quelle est la complexité de QuickSort en cas moyen ? Pourquoi ?
O(n log n). Le pivot divise le tableau en parties équilibrées en moyenne.
32
Donnez un exemple de meilleur cas O(1).
Recherche linéaire où la cible est en première position.
33
Comment calculer le cas moyen pour un tri ?
Moyenner le nombre de comparaisons sur toutes les permutations possibles des données.
34
Pourquoi le meilleur cas est rarement utilisé ?
Car il est souvent irréaliste (ex: tableau déjà trié pour le tri par insertion).
35
Donnez un exemple d’algo où cas moyen = pire cas.
Tri Fusion → O(n log n) dans tous les cas (stable et déterministe).
36
Quand utilise-t-on le cas moyen en pratique ?
Pour les applications grand public où les données sont imprévisibles mais pas malveillantes.