QCM : Algorithmique et structures de données (39 questions)

Questions et réponses du QCM

1. Quelle propriété distingue un tuple d’une liste en Python ?

Un tuple ne peut pas être modifié après sa création.
Un tuple trie automatiquement les éléments ajoutés.
Un tuple ne peut contenir que des nombres entiers.
Un tuple est toujours plus court qu’une liste.

Un tuple ne peut pas être modifié après sa création.

Explication

Un tuple est non mutable : son contenu ne peut pas être modifié après sa création. Une liste, en revanche, peut être modifiée, mais les autres propositions décrivent des propriétés qui ne définissent pas les tuples.

2. Quel est le résultat de l’expression (1,2,3)+(4,0) (1,2,3) + (4,0) en Python ?

(4,0,1,2,3) (4,0,1,2,3)
(1,2,3,1,2,3,4,0) (1,2,3,1,2,3,4,0)
(1,2,3,4) (1,2,3,4)
(1,2,3,4,0) (1,2,3,4,0)

$$ (1,2,3,4,0) $$

Explication

L’opérateur + concatène les deux tuples en plaçant leurs éléments bout à bout. La répétition d’un tuple correspondrait à un clonage, tandis que l’ordre des éléments reste celui des opérandes.

3. Quelle instruction échange correctement les valeurs de aa et bb sans variable temporaire ?

(a,b)=(a,a) (a,b) = (a,a)
(a,b)=(a,b,a) (a,b) = (a,b,a)
(a,b)=(b,a) (a,b) = (b,a)
(a,b)=(b,b) (a,b) = (b,b)

$$ (a,b) = (b,a) $$

Explication

L’affectation parallèle permet d’affecter simultanément à aa et bb les anciennes valeurs de bb et aa. Les autres instructions dupliquent une valeur ou fournissent un nombre inadéquat d’éléments.

4. Si L=[10,20,30,40]L = [10,20,30,40], quel élément désigne L[−2]L[-2] ?

L’avant-dernier élément, soit 30
Le deuxième élément, soit 20
Le premier élément, soit 10
Le dernier élément, soit 40

L’avant-dernier élément, soit 30

Explication

Les indices négatifs commencent à la fin de la liste : L[−1]L[-1] vaut 40 et L[−2]L[-2] vaut donc 30. L’indice 0 désigne le premier élément, ce qui explique l’erreur de la proposition correspondante.

5. Si L=[0,1,2,3,4]L = [0,1,2,3,4], quel est le résultat de L[1:4]L[1:4] ?

[1,2,3][1,2,3]
[1,2,3,4][1,2,3,4]
[0,1,2,3,4][0,1,2,3,4]
[0,1,2,3][0,1,2,3]

$$[1,2,3]$$

Explication

Dans une tranche, la borne de début est incluse et la borne de fin est exclue : L[1:4]L[1:4] contient donc les indices 1, 2 et 3. La proposition incluant l’élément d’indice 4 confond la borne finale avec une borne incluse.

6. Quelle description correspond à une chaîne de caractères en Python ?

Une séquence de type str, indexable et non mutable
Une collection de type list, modifiable et non indexable
Une structure numérique, triée et modifiable
Une séquence de type tuple, limitée aux caractères numériques

Une séquence de type str, indexable et non mutable

Explication

Une chaîne est une séquence de type strstr qui peut être indexée, mais dont le contenu ne peut pas être modifié directement. Les autres propositions lui attribuent à tort le type d’une liste, des propriétés numériques ou le type d’un tuple.

7. Quel comportement caractérise une pile ?

Tous les éléments sont accessibles simultanément au sommet.
Les éléments sont retirés dans l’ordre alphabétique.
Le premier élément entré est le premier élément sorti.
Le dernier élément entré est le premier élément sorti.

Le dernier élément entré est le premier élément sorti.

Explication

Une pile suit le principe LIFO : le dernier élément ajouté est le premier retiré, et seul le sommet est directement accessible. Le principe FIFO décrit une file, tandis que les deux autres propositions ne correspondent pas au fonctionnement d’une pile.

8. Dans une file, où ajoute-t-on les éléments et où les retire-t-on ?

À la tête pour les ajouter, puis à la queue pour les retirer
Au sommet pour les ajouter, puis à la base pour les retirer
À la queue pour les ajouter, puis à la tête pour les retirer
À la queue pour les ajouter, puis à la queue pour les retirer

À la queue pour les ajouter, puis à la tête pour les retirer

Explication

Une file suit le principe FIFO : les éléments entrent par la queue et sortent par la tête. Le fonctionnement d’une pile utilise un sommet, tandis que retirer par la queue ne respecte pas la définition donnée d’une file.

9. Quelle instruction supprime la clé $$

del(D["nom"])del(D["nom"])
D["nom"]=0D["nom"] = 0
D[0]="nom"D[0] = "nom"
D.add("nom")D.add("nom")

$$del(D["nom"])$$

Explication

L’instruction del(D["nom"])del(D["nom"]) supprime l’association correspondant à la clé « nom » ; la méthode D.pop("nom")D.pop("nom") aurait également convenu. Affecter une valeur modifie l’association, tandis que les autres instructions ne suppriment pas cette clé.

10. Quelle opération caractérise le tri par sélection lors du traitement d’une partie non triée ?

Comparer chaque paire voisine puis échanger les valeurs mal ordonnées
Choisir son minimum puis l’échanger avec le premier élément de cette partie
Chercher son maximum puis l’échanger avec le dernier élément de cette partie
Décaler les éléments supérieurs pour insérer une nouvelle valeur

Chercher son maximum puis l’échanger avec le dernier élément de cette partie

Explication

Le tri par sélection place progressivement le maximum de la partie non triée à sa position finale, en l’échangeant avec son dernier élément. Le décalage d’éléments pour insérer une valeur correspond au tri par insertion.

11. Lors d’un tri par insertion, comment un élément est-il placé dans la partie déjà triée ?

La liste est divisée en deux sous-listes de tailles comparables
Les voisins successifs sont échangés jusqu’à atteindre la bonne position
Les éléments supérieurs sont décalés pour libérer sa position
Le maximum est échangé avec le dernier élément disponible

Les éléments supérieurs sont décalés pour libérer sa position

Explication

Le tri par insertion parcourt les éléments et décale les valeurs supérieures dans la partie déjà triée afin d’insérer l’élément à sa place. Les échanges entre voisins caractérisent plutôt le tri à bulles.

12. Quelle méthode convient à une liste triée lorsqu’il faut réduire de moitié la zone de recherche après chaque comparaison ?

Le tri par sélection
La recherche séquentielle
La recherche dichotomique
Le tri par insertion

La recherche dichotomique

Explication

La recherche dichotomique exploite l’ordre de la liste et divise par deux la zone examinée à chaque étape. La recherche séquentielle parcourt les éléments successivement sans effectuer cette division.

13. Quel mode d’ouverture permet d’ajouter du contenu à la fin d’un fichier sans effacer son contenu existant ?

Le mode w
Le mode a
Le mode r+
Le mode r

Le mode a

Explication

Le mode a conserve le contenu existant et ajoute les nouvelles données à la fin du fichier. Le mode w peut écraser le contenu présent ou créer le fichier s’il n’existe pas.

14. Quelle instruction faut-il utiliser après les opérations sur un fichier ouvert afin de le fermer ?

close()
write()
open()
read()

close()

Explication

La méthode close() ferme le fichier une fois les opérations terminées. La méthode write() sert à écrire des données et ne ferme pas le fichier.

15. Quelle association entre les fonctions de lecture Python et leur résultat est correcte ?

read(t) lit une ligne, readline() lit t caractères et readlines() renvoie le fichier fermé
read(t) lit t caractères, readline() lit une ligne et readlines() renvoie toutes les lignes
read(t) renvoie toutes les lignes, readline() lit t caractères et readlines() lit une ligne
read(t) ferme le fichier, readline() écrit une ligne et readlines() ajoute du contenu

read(t) lit t caractères, readline() lit une ligne et readlines() renvoie toutes les lignes

Explication

read(t) lit t caractères depuis la position courante, readline() lit une ligne et readlines() fournit la liste des lignes. Les autres associations confondent les rôles des fonctions de lecture ou leur attribuent des opérations d’écriture.

16. Comment est représenté un tableau bidimensionnel Python ?

Par une liste dont chaque élément est une liste représentant une ligne
Par une liste contenant une seule valeur pour chaque colonne
Par un dictionnaire associant chaque élément à une position unique
Par une chaîne de caractères organisée en lignes et en colonnes

Par une liste dont chaque élément est une liste représentant une ligne

Explication

Un tableau bidimensionnel Python est une liste de listes, chaque sous-liste représentant une ligne. Cette structure permet de décrire séparément le nombre de lignes et de colonnes.

17. Quelle fonction transforme une liste ou une liste de listes en tableau NumPy ?

dot()
array()
append()
reshape()

array()

Explication

La fonction array() convertit une liste ou une liste de listes en tableau NumPy. La fonction reshape() modifie une forme existante, tandis qu'append() ajoute des éléments et dot() effectue un produit.

18. Quel est le résultat de l’instruction arange(15).reshape(5,3)\texttt{arange(15).reshape(5,3)} ?

Un tableau de 5 lignes et 3 colonnes contenant les mêmes éléments
Un tableau de 5 lignes et 3 colonnes après suppression de certains éléments
Un tableau de 3 lignes et 5 colonnes contenant quinze éléments nouveaux
Un tableau de 15 lignes et 1 colonne contenant des éléments réordonnés

Un tableau de 5 lignes et 3 colonnes contenant les mêmes éléments

Explication

reshape(5,3) modifie la forme du tableau pour obtenir 5 lignes et 3 colonnes sans changer ses éléments, soit quinze valeurs réparties autrement. La fonction append(), contrairement à reshape(), peut modifier le nombre d’éléments.

19. Quelle association entre dot() et vdot() est correcte ?

dot() calcule un produit matriciel, tandis que vdot() calcule le produit scalaire de vecteurs
dot() modifie la forme d’une matrice, tandis que vdot() ajoute des éléments
dot() supprime des colonnes, tandis que vdot() transforme une liste en tableau
dot() calcule un produit scalaire, tandis que vdot() calcule un produit matriciel

dot() calcule un produit matriciel, tandis que vdot() calcule le produit scalaire de vecteurs

Explication

La fonction dot(A,B) réalise le produit matriciel de deux matrices, alors que vdot(A,B) calcule le produit scalaire de deux vecteurs. Les autres propositions attribuent à ces fonctions des opérations de forme ou de modification de tableau.

20. Dans une figure créée avec matplotlib.pyplot, quelle fonction affiche effectivement la figure à l’écran ?

grid ajoute les lignes de grille
legend ajoute la légende descriptive
show affiche la figure générée
plot construit la courbe tracée

show affiche la figure générée

Explication

La fonction show rend la figure visible après sa préparation. La fonction plot construit la courbe, mais elle ne correspond pas à l’opération d’affichage elle-même.

21. Quelle association entre fonctions de matplotlib.pyplot et rôles est correcte pour annoter une courbe ?

legend et show construisent la courbe
xlabel et ylabel nomment les axes
plot et title affichent la fenêtre graphique
title et grid nomment les deux axes

xlabel et ylabel nomment les axes

Explication

xlabel et ylabel servent respectivement à nommer les axes horizontal et vertical. title ajoute un titre, tandis que plot trace la courbe et show affiche la figure.

22. Dans une fonction récursive, quel élément provoque l’arrêt des appels successifs ?

La condition de base
L’appel récursif
La valeur du paramètre
La déclaration de la fonction

La condition de base

Explication

La condition de base arrête la récursion lorsqu’elle est atteinte. L’appel récursif produit au contraire une nouvelle activation de la fonction.

23. Quelle situation caractérise une récursivité multiple ?

Une étape effectue plusieurs appels récursifs
Une étape effectue un seul appel récursif
Une fonction reçoit un appel comme paramètre
Deux fonctions s’appellent alternativement

Une étape effectue plusieurs appels récursifs

Explication

La récursivité multiple comporte plusieurs appels récursifs dans une même étape. Un seul appel correspond à la récursivité simple, tandis que les deux autres descriptions désignent d’autres formes.

24. Quelle succession d’opérations décrit le tri fusion ?

Diviser jusqu’à des listes unitaires puis fusionner les listes triées
Échanger les voisins jusqu’à obtenir une liste entièrement ordonnée
Choisir un élément pivot puis partitionner autour de celui-ci
Insérer chaque élément dans une portion déjà classée

Diviser jusqu’à des listes unitaires puis fusionner les listes triées

Explication

Le tri fusion divise récursivement la liste jusqu’à obtenir des sous-listes d’un élément, puis les fusionne dans l’ordre. Les autres descriptions correspondent à d’autres stratégies de tri.

25. Quelle structure correspond à la définition d’un arbre binaire ?

Une suite linéaire de nœuds reliés deux à deux
Une racine avec deux sous-arbres gauche et droit
Un ensemble de feuilles sans nœud racine
Une racine reliée à trois sous-arbres ordonnés

Une racine avec deux sous-arbres gauche et droit

Explication

Un arbre binaire est vide ou possède une racine et deux sous-arbres binaires disjoints, gauche et droit. Le nombre de sous-arbres et la présence d’une racine le distinguent des autres structures.

26. Dans un arbre, comment distingue-t-on la profondeur d’un nœud de la hauteur de l’arbre ?

La profondeur mesure la distance à la racine, la hauteur est la profondeur maximale
La profondeur concerne les feuilles, la hauteur concerne chaque nœud
La profondeur est maximale à la racine, la hauteur vaut zéro aux feuilles
La profondeur mesure la taille de l’arbre, la hauteur compte ses racines

La profondeur mesure la distance à la racine, la hauteur est la profondeur maximale

Explication

La profondeur d’un nœud est sa distance à la racine, tandis que la hauteur de l’arbre est la profondeur maximale de ses nœuds. Ainsi, la racine a une profondeur de 0 et la hauteur décrit l’arbre entier.

27. Pour un arbre dont la racine est R, le sous-arbre gauche G et le sous-arbre droit D, quel ordre correspond au parcours préfixe ?

G puis D puis R
R puis D puis G
R puis G puis D
G puis R puis D

R puis G puis D

Explication

Le parcours préfixe suit l’ordre NGD : nœud, gauche, droite. Le parcours infixe place la racine entre les deux sous-arbres, tandis que le parcours suffixe la place après eux.

28. Quelle différence décrit correctement les parcours en largeur et en profondeur d’un arbre ?

La largeur traite les niveaux, la profondeur explore une branche avant de changer
La largeur trie les nœuds, la profondeur compte leurs profondeurs
La largeur suit une branche, la profondeur traite les niveaux successifs
La largeur visite la racine en dernier, la profondeur la visite en premier

La largeur traite les niveaux, la profondeur explore une branche avant de changer

Explication

Le parcours en largeur explore l’arbre niveau par niveau, alors que le parcours en profondeur complète une branche avant de passer à la suivante. Les autres propositions confondent leurs stratégies ou leur attribuent des opérations étrangères.

29. Dans un arbre binaire de recherche, où place-t-on une valeur inférieure à celle de la racine ?

Dans un nœud frère de la racine
Dans le sous-arbre gauche
Dans le sous-arbre droit
Au niveau suivant de la racine

Dans le sous-arbre gauche

Explication

Une valeur inférieure à celle d’un nœud est placée dans son sous-arbre gauche, tandis qu’une valeur supérieure va dans le sous-arbre droit. La placer à droite inverserait la règle d’organisation de cet arbre.

30. Quelle propriété caractérise un arbre maximier ?

Chaque nœud possède exactement deux fils de même valeur
Chaque nœud a une valeur supérieure à celle de ses deux fils
Chaque niveau contient des valeurs dans l’ordre croissant
Chaque feuille a une valeur supérieure à celle de tous les nœuds internes

Chaque nœud a une valeur supérieure à celle de ses deux fils

Explication

Un arbre maximier est un arbre parfait où chaque nœud possède une valeur supérieure à celles de ses deux fils. La propriété porte donc sur la comparaison entre chaque nœud et ses descendants immédiats, et non sur l’ordre global des niveaux.

31. Lors d’une recherche dans un arbre binaire de recherche, que fait-on après avoir comparé la valeur recherchée à la racine ?

On parcourt les feuilles de gauche à droite jusqu’à trouver la valeur
On revient à la racine après chaque comparaison avant de continuer
On explore les deux sous-arbres afin de ne manquer aucune possibilité
On choisit le sous-arbre droit si elle est supérieure et le gauche si elle est inférieure

On choisit le sous-arbre droit si elle est supérieure et le gauche si elle est inférieure

Explication

La comparaison avec la racine permet de sélectionner le sous-arbre correspondant au sens de l’inégalité, ce qui évite d’explorer l’autre sous-arbre. Explorer les deux branches correspondrait davantage au comportement d’une recherche dans un arbre sans propriété d’ordre.

32. Que cherche à estimer la complexité algorithmique ?

La quantité de mémoire disponible avant l’exécution
La probabilité qu’un algorithme produise un résultat incorrect
Le nombre de résultats différents produits par l’algorithme
Le nombre d’opérations de base selon la taille de l’entrée

Le nombre d’opérations de base selon la taille de l’entrée

Explication

La complexité algorithmique évalue le coût d’exécution en fonction de la taille des données d’entrée, notamment au moyen du nombre d’opérations de base. La correction concerne la justesse du résultat et constitue une notion différente.

33. Quelle classe de complexité décrit un algorithme dont le coût augmente proportionnellement à la taille de l’entrée ?

Θ(log⁡(n))\Theta(\log(n)), la classe logarithmique
Θ(n2)\Theta(n^2), la classe quadratique
Θ(1)\Theta(1), la classe constante
Θ(n)\Theta(n), la classe linéaire

$$\Theta(n)$$, la classe linéaire

Explication

Une croissance proportionnelle à la taille de l’entrée relève de la classe linéaire Θ(n)\Theta(n). Une complexité constante ne dépend pas de cette taille, tandis que les classes logarithmique et quadratique suivent des croissances différentes.

34. Quelle complexité asymptotique obtient-on pour une expression dont le terme dominant est 7n27n^2, accompagnée de termes de degré inférieur ?

O(7n2)O(7n^2), car le coefficient multiplicatif doit être conservé
O(n2)O(n^2), car la constante et les termes secondaires sont ignorés
O(n)O(n), car les termes de degré inférieur déterminent la croissance
O(n3)O(n^3), car une borne supérieure doit utiliser le degré suivant

$$O(n^2)$$, car la constante et les termes secondaires sont ignorés

Explication

La notation O conserve le terme dominant et ignore les constantes multiplicatives ainsi que les termes additifs secondaires, ce qui donne O(n2)O(n^2). Le calcul exact pourrait conserver ces détails, mais l’analyse asymptotique les écarte.

35. Pourquoi une recherche dichotomique sur une liste triée possède-t-elle une complexité Θ(log⁡2(n))\Theta(\log_2(n)) ?

Parce qu’elle reconstruit la liste après chaque comparaison
Parce qu’elle compare chaque élément avec tous les autres éléments
Parce que le nombre d’éléments restants est divisé par deux à chaque étape
Parce qu’elle examine chaque élément une fois dans l’ordre de la liste

Parce que le nombre d’éléments restants est divisé par deux à chaque étape

Explication

À chaque étape, la recherche dichotomique élimine environ la moitié des éléments encore possibles, d’où une croissance logarithmique Θ(log⁡2(n))\Theta(\log_2(n)). Examiner chaque élément une fois conduirait plutôt à une complexité linéaire.

36. Comment définit-on un graphe non orienté ?

Par un ensemble de sommets et un ensemble de parties à deux éléments de ces sommets
Par une suite de sommets reliés dans un ordre de parcours imposé
Par un ensemble de sommets et un ensemble de couples ordonnés de ces sommets
Par un ensemble d’arcs possédant chacun une origine et une destination

Par un ensemble de sommets et un ensemble de parties à deux éléments de ces sommets

Explication

Un graphe non orienté est un couple composé d’un ensemble de sommets et d’un ensemble d’arêtes, chaque arête étant une partie à deux éléments de cet ensemble. Les couples ordonnés et la distinction origine-destination caractérisent plutôt les graphes orientés.

37. Dans un graphe orienté, quelle différence existe-t-il entre les arcs (x,y)\left(x,y\right) et (y,x)\left(y,x\right) ?

Ils représentent nécessairement la même liaison sans direction
Ils indiquent deux arêtes dont la longueur doit être identique
Ils représentent deux directions distinctes entre les mêmes sommets
Ils correspondent à deux sommets supplémentaires du graphe

Ils représentent deux directions distinctes entre les mêmes sommets

Explication

Un arc orienté est un couple de sommets dans lequel l’ordre distingue l’origine de la destination : (x,y)\left(x,y\right) et (y,x)\left(y,x\right) sont donc différents. Cette distinction n’existe pas pour une arête non orientée.

38. Un graphe non orienté possède aa arêtes. Quelle relation vérifient les degrés de ses sommets ?

La somme des degrés vaut 2a2a
La somme des degrés vaut a2a^2
La somme des degrés vaut le nombre de sommets
La somme des degrés vaut aa

La somme des degrés vaut $$2a$$

Explication

Chaque arête non orientée contribue une unité au degré de chacun de ses deux sommets, donc la somme des degrés vaut S=2aS=2a. Le nombre de sommets correspond à l’ordre du graphe et ne détermine pas directement cette somme.

39. Quelle condition caractérise un graphe non orienté possédant un cycle eulérien ?

Le graphe est connexe et tous ses sommets sont de degré pair
Le graphe possède autant d’arêtes que de sommets dans chaque composante
Le graphe contient au moins un sommet de degré impair et reste connexe
Le graphe contient un chemin entre quelques paires de sommets et un cycle

Le graphe est connexe et tous ses sommets sont de degré pair

Explication

Un cycle eulérien existe si le graphe est connexe et si tous ses sommets ont un degré pair. La connexité seule ne suffit pas, et la présence de sommets de degré impair empêche cette propriété.

Révisez avec les flashcards

Mémorisez les réponses avec 70 flashcards sur Algorithmique et structures de données.

Qu'est-ce qu'un tuple en programmation ?

Une structure non mutable dont le contenu ne peut pas être modifié.

Que fait l'opérateur + entre deux tuples ?

Il place leurs éléments bout à bout.

Quel est le résultat de (1,2,3) + (4,0) ?

(1,2,3,4,0)

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Algorithmique et structures de données.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM