QCM : Introduction aux Structures de Données et Algorithmes — 22 questions

Questions et réponses du QCM

1. Quelle affirmation décrit le mieux le principe d’une pile en programmation ?

Une structure hiérarchique organisée autour d’un nœud racine
Une structure linéaire de type LIFO, où le dernier élément ajouté est retiré en premier
Une structure qui permet d’accéder directement à n’importe quel élément par sa clé
Une structure linéaire de type FIFO, où le premier élément ajouté est retiré en premier

Une structure linéaire de type LIFO, où le dernier élément ajouté est retiré en premier

Explication

Une pile fonctionne en LIFO : on retire d’abord le dernier élément inséré. La FIFO correspond au fonctionnement d’une file, pas d’une pile.

2. Dans une classe Python, quel rôle joue généralement la méthode __init__ ?

Elle sert à parcourir les objets de la classe dans l’ordre d’insertion
Elle initialise les attributs de l’instance lors de la création de l’objet
Elle empêche toute modification des attributs après la création
Elle définit automatiquement les méthodes héritées d’une autre classe

Elle initialise les attributs de l’instance lors de la création de l’objet

Explication

La méthode __init__ est utilisée pour initialiser les attributs d’un objet au moment de sa création. Elle ne gère ni l’héritage ni le parcours des objets.

3. Que renvoie une boucle for cle in dictionnaire sur un dictionnaire Python ?

Les paires clé-valeur du dictionnaire
Les clés du dictionnaire
Les éléments triés par ordre alphabétique
Les valeurs stockées dans le dictionnaire

Les clés du dictionnaire

Explication

Par défaut, parcourir un dictionnaire en boucle itère sur ses clés. Pour parcourir les valeurs ou les couples clé-valeur, on utilise respectivement values() et items().

4. Quelle est la bonne manière d’ajouter ou de modifier une entrée dans un dictionnaire Python ?

dictionnaire[cle] = valeur
dictionnaire.append(cle, valeur)
dictionnaire.insert(cle, valeur)
dictionnaire.pop(cle, valeur)

dictionnaire[cle] = valeur

Explication

On ajoute ou modifie une entrée avec une affectation sur la clé, sous la forme dictionnaire[cle] = valeur. append et insert ne sont pas des opérations de dictionnaire.

5. Dans un arbre binaire de recherche, quelle propriété doit vérifier le sous-arbre gauche d’un nœud ?

Ses valeurs sont inférieures à celle du nœud
Ses valeurs sont toujours triées par niveau
Ses valeurs sont supérieures à celle du nœud
Ses valeurs sont égales à celle du nœud

Ses valeurs sont inférieures à celle du nœud

Explication

Dans un ABR, les valeurs du sous-arbre gauche sont inférieures à celle du nœud, et celles du sous-arbre droit lui sont supérieures. C’est la règle qui permet la recherche efficace.

6. Comment définit-on la hauteur d’un arbre vide ?

1
0
Elle n’est pas définie
-1

-1

Explication

La hauteur correspond au nombre d’arêtes entre la racine et le nœud le plus profond, et vaut -1 si l’arbre est vide. Cela distingue bien un arbre vide d’un arbre de hauteur nulle.

7. Quel est l’ordre de visite d’un parcours infixe ?

Sous-arbre gauche, racine, sous-arbre droit
Niveau par niveau de gauche à droite
Sous-arbre gauche, sous-arbre droit, racine
Racine, sous-arbre gauche, sous-arbre droit

Sous-arbre gauche, racine, sous-arbre droit

Explication

Le parcours infixe visite d’abord le sous-arbre gauche, puis la racine, puis le sous-arbre droit. Dans un ABR, cela produit les valeurs dans l’ordre croissant.

8. Quel avantage principal apporte un arbre AVL par rapport à un ABR non équilibré ?

Il supprime le besoin de comparer les valeurs
Il stocke des poids sur chaque arête
Il impose un parcours en largeur pour la recherche
Il garantit une hauteur logarithmique pour conserver de bonnes performances

Il garantit une hauteur logarithmique pour conserver de bonnes performances

Explication

Un AVL est un ABR auto-équilibré qui maintient une hauteur logarithmique, ce qui améliore la recherche. Un ABR non équilibré peut au contraire dégénérer et coûter linéairement.

9. Dans un graphe pondéré représenté par une matrice d’adjacence, que représente l’entrée i,j ?

Le poids de l’arête allant de i vers j
Le nombre total de sommets du graphe
Le degré entrant du sommet i
La couleur du sommet j

Le poids de l’arête allant de i vers j

Explication

Dans une matrice d’adjacence, la case i,j contient l’information sur l’arête de i vers j, notamment son poids si le graphe est pondéré. Une valeur nulle indique généralement l’absence d’arête.

10. Quelle affirmation décrit correctement DFS ?

Il explore un chemin aussi loin que possible avant de revenir en arrière
Il explore les sommets niveau par niveau à l’aide d’une file
Il choisit toujours le sommet ayant le plus petit poids
Il trouve le plus court chemin dans tous les graphes pondérés

Il explore un chemin aussi loin que possible avant de revenir en arrière

Explication

DFS, ou parcours en profondeur d’abord, avance au maximum dans une branche avant de revenir en arrière. Le parcours en largeur, lui, explore niveau par niveau avec une file.

11. Dans un schéma relationnel SQL, quel rôle joue une clé primaire dans une table ?

Créer un lien vers une ligne d'une autre table
Décrire le type de données autorisé pour une colonne
Identifier de manière unique chaque ligne de la table
Permettre de trier automatiquement les lignes

Identifier de manière unique chaque ligne de la table

Explication

Une clé primaire sert à identifier de façon unique chaque ligne d’une table. La clé étrangère sert, elle, à établir un lien avec une autre table.

12. Dans un schéma relationnel, que signifie le symbole # associé à un attribut ?

L'attribut est calculé à partir d'une requête
L'attribut doit être unique dans toute la base
L'attribut est une clé primaire
L'attribut est une clé étrangère

L'attribut est une clé étrangère

Explication

Le symbole # indique qu’un attribut est une clé étrangère. Une clé primaire est plutôt représentée par un soulignement dans le schéma.

13. Dans une table de routage, quelles informations permettent de choisir le prochain saut vers une destination ?

Destination, interface et passerelle
Nom d'hôte, masque et TTL
Adresse MAC, port et protocole
Source, destination et numéro de séquence

Destination, interface et passerelle

Explication

Une table de routage contient notamment la destination, l’interface de sortie et la passerelle à utiliser. Ces éléments servent à déterminer le prochain saut.

14. Quelle affirmation décrit le mieux le protocole RIP ?

Il attribue une adresse IP à chaque machine du réseau
Il échange périodiquement des tables et mesure les routes en nombre de sauts
Il calcule le chemin de coût minimal à partir de la bande passante
Il choisit toujours la route la plus courte en nombre de bits

Il échange périodiquement des tables et mesure les routes en nombre de sauts

Explication

RIP est basé sur l’échange périodique de tables entre routeurs et utilise le nombre de sauts comme métrique. Le calcul de coût minimal correspond plutôt à OSPF.

15. Dans un algorithme récursif, quel est le rôle du cas de base ?

Trier les sous-problèmes avant chaque appel
Diviser automatiquement le problème en deux parties égales
Comparer les éléments dans l'ordre croissant
Arrêter la récursion et éviter des appels infinis

Arrêter la récursion et éviter des appels infinis

Explication

Le cas de base est la condition qui stoppe la récursion. Sans lui, la fonction risquerait de s’appeler indéfiniment.

16. Quelle étape caractérise le tri fusion après le tri récursif des deux moitiés ?

Choisir le minimum puis recommencer sur le reste
Fusionner les deux listes triées en comparant leurs premiers éléments
Supprimer les doublons avant de reconstruire la liste
Échanger les éléments extrêmes de la liste

Fusionner les deux listes triées en comparant leurs premiers éléments

Explication

Le tri fusion combine ensuite les deux moitiés déjà triées en comparant leurs premiers éléments. C’est cette fusion qui reconstruit la liste finale triée.

17. Dans Python, à quoi sert la fonction dir() appliquée à un module ?

À importer uniquement les docstrings
À exécuter automatiquement toutes les fonctions du module
À lister les noms disponibles dans ce module
À afficher l'aide détaillée d'une fonction

À lister les noms disponibles dans ce module

Explication

La fonction dir() affiche les noms accessibles dans un module ou un objet. Pour la documentation, on utilise plutôt help().

18. Que permet l'instruction from module import fonction ?

D'appeler directement la fonction sans préfixe de module
D'empêcher l'accès aux autres éléments du module
De charger tout le contenu du module avec des conflits possibles
De renommer automatiquement le module importé

D'appeler directement la fonction sans préfixe de module

Explication

Avec from module import fonction, la fonction peut être appelée directement, sans écrire le nom du module devant. Cela s’oppose à import module, où le préfixe reste nécessaire.

19. Dans le tri par insertion, quelle opération permet de placer la valeur courante dans la partie déjà triée ?

Fusionner deux sous-listes déjà triées
Parcourir la liste en ne gardant que les valeurs paires
Échanger la valeur courante avec le plus petit élément de la liste
Décaler vers la droite les éléments plus grands avant d'insérer la valeur

Décaler vers la droite les éléments plus grands avant d'insérer la valeur

Explication

Le tri par insertion déplace vers la droite les éléments plus grands que la valeur à insérer, puis insère cette valeur à sa place. Il construit ainsi progressivement une zone triée.

20. Quelle description correspond au tri par sélection ?

Il fusionne deux segments triés en comparant leurs premiers éléments
Il cherche le minimum de la partie non triée puis l'échange avec l'élément courant
Il insère chaque élément dans une sous-liste déjà ordonnée
Il retire les doublons avant de comparer les valeurs

Il cherche le minimum de la partie non triée puis l'échange avec l'élément courant

Explication

Le tri par sélection repère le minimum dans la partie restante puis l’échange avec l’élément courant. C’est ce qui le distingue du tri par insertion.

21. Que signifie l’écriture $a\equiv b\ (\mathrm{mod}\ n)$ ?

La somme $a+b$ est divisible par $n$
Le quotient de $a$ par $b$ vaut $n$
Les nombres $a$ et $b$ ont le même PGCD
La différence $a-b$ est divisible par $n$

La différence $a-b$ est divisible par $n$

Explication

Deux nombres sont congrus modulo $n$ lorsque $n$ divise leur différence $a-b$. Cette définition est la base du calcul en congruence modulo $n$.

22. Que fournit l’algorithme d’Euclide étendu en plus du PGCD de deux entiers ?

La décomposition de $a$ et $b$ en facteurs premiers
La liste de tous les diviseurs communs de $a$ et $b$
Des coefficients $x$ et $y$ tels que $ax+by=\mathrm{PGCD}(a,b)$
Une preuve que $a$ et $b$ sont toujours premiers entre eux

Des coefficients $x$ et $y$ tels que $ax+by=\mathrm{PGCD}(a,b)$

Explication

L’algorithme d’Euclide étendu calcule le PGCD et donne aussi des coefficients vérifiant l’identité de Bézout. Les autres propositions décrivent d’autres notions mathématiques, mais pas cet algorithme.

Révisez avec les flashcards

Mémorisez les réponses avec 22 flashcards sur Introduction aux Structures de Données et Algorithmes.

Interface — définition ?

Ensemble de fonctionnalités sans implémentation.

Encapsulation — rôle ?

Protège les données internes d’une classe.

Héritage — principe ?

Réutilise et étend le comportement d’une classe.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Introduction aux Structures de Données et Algorithmes.

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