QCM : Graphes, dictionnaires et hachage — 26 questions

Questions et réponses du QCM

1. Pour une liste Python de longueur nn, quelles positions d’indices sont valides ?

Les positions entières de 0 à nn
Les positions entières de 1 à nn
Les positions entières de 0 à n1n-1
Les clés textuelles de 0 à n1n-1

Les positions entières de 0 à $$n-1$$

Explication

Une liste de longueur nn possède des indices entiers allant de 0 à n1n-1. L’indexation par des clés caractérise plutôt un dictionnaire, tandis que l’indice nn est hors limites.

2. Que contient l’expression Python L[i:j]L[i:j] lorsque LL est une liste ?

Les éléments d’indices 00 à j1j-1
Les éléments d’indices ii à jj inclus
Les éléments d’indices i+1i+1 à jj
Les éléments d’indices ii à j1j-1

Les éléments d’indices $$i$$ à $$j-1$$

Explication

La tranche commence à l’indice ii et s’arrête avant l’indice jj. L’indice jj n’est donc pas inclus, contrairement à certaines bornes utilisées dans d’autres contextes.

3. Quelle opération caractérise le comportement d’une pile Python utilisant une liste ?

pop compte les éléments et append supprime le dernier
pop retire le premier élément et append ajoute au début
pop trie les éléments et append inverse leur ordre
pop retire le dernier élément et append ajoute à la fin

pop retire le dernier élément et append ajoute à la fin

Explication

Dans une pile, append ajoute un élément au sommet, situé à la fin de la liste, et pop retire puis retourne cet élément. Ce fonctionnement correspond au principe « dernier arrivé, premier sorti ».

4. Quelle association entre une structure Python et son mode d’indexation est correcte ?

Un dictionnaire utilise des listes, tandis qu’une liste utilise des tuples
Un dictionnaire utilise des clés, tandis qu’une liste utilise des entiers
Un dictionnaire utilise des indices entiers, tandis qu’une liste utilise des clés
Un dictionnaire utilise des positions décimales, tandis qu’une liste utilise des chaînes

Un dictionnaire utilise des clés, tandis qu’une liste utilise des entiers

Explication

Un dictionnaire associe des valeurs à des clés, qui peuvent notamment être des chaînes ou des tuples. Une liste est organisée par des indices entiers, et une liste ne peut pas servir de clé de dictionnaire.

5. Combien de graines sont présentes au départ sur le plateau d’awalé décrit par le modèle, et comment sont-elles réparties ?

24 graines, réparties dans 12 trous à raison de 2 par trou
12 graines, réparties dans 2 rangées à raison de 6 par rangée
48 graines, réparties dans 12 trous à raison de 4 par trou
48 graines, réparties dans 6 trous à raison de 8 par trou

48 graines, réparties dans 12 trous à raison de 4 par trou

Explication

Le plateau comporte deux rangées de six trous, et chaque trou contient quatre graines, soit 2×6×4=482 \times 6 \times 4 = 48 graines. La répartition ne correspond donc ni à 24 graines ni à six trous.

6. Dans quelle situation une partie d’awalé peut-elle prendre fin selon la règle indiquée ?

Lorsqu’un joueur possède 12 graines ou que son camp devient vide
Lorsqu’un joueur atteint 24 graines ou qu’il ne reste plus de coups souhaités
Lorsqu’un joueur a au moins 25 graines ou qu’aucun nouveau gain n’est possible
Lorsqu’un joueur joue six coups ou que toutes les cases ont été visitées

Lorsqu’un joueur a au moins 25 graines ou qu’aucun nouveau gain n’est possible

Explication

La partie s’arrête lorsqu’un joueur possède au moins 25 graines dans sa réserve ou lorsqu’une situation empêche tout nouveau gain. Le seuil de 24 graines ne constitue pas la majorité annoncée.

7. Quelle séquence décrit correctement un coup d’awalé ?

Choisir une case non vide de son camp, semer les graines une à une, puis récolter éventuellement
Choisir une case non vide adverse, semer les graines sans suivre le sens direct, puis récolter
Choisir une case vide de son camp, distribuer les graines adverses, puis les conserver sur place
Choisir une case adverse, récolter ses graines, puis les semer dans la case de départ

Choisir une case non vide de son camp, semer les graines une à une, puis récolter éventuellement

Explication

Le joueur prend les graines d’une case non vide de son camp et les sème une par une dans le sens direct, sans ressemer dans la case de départ, avant une éventuelle récolte. La récolte intervient après la semence et retire des graines vers la réserve.

8. Quelles conditions une case doit-elle remplir pour être jouable par le joueur actif ?

Être vide, appartenir à son camp et permettre de remplir le camp adverse
Appartenir à son camp, contenir 2 ou 3 graines et vider le camp adverse
Appartenir au camp adverse, contenir 2 ou 3 graines et vider le camp adverse
Appartenir à son camp, contenir des graines et préserver des graines dans le camp adverse

Appartenir à son camp, contenir des graines et préserver des graines dans le camp adverse

Explication

Une case jouable appartient au camp actif, n’est pas vide et ne doit pas vider complètement le camp adverse à la fin du tour. Les conditions « 2 ou 3 graines » concernent une case ramassable adverse, pas toute case jouable.

9. Quelle structure définit un graphe non orienté ?

Une suite ordonnée de sommets reliés par des arêtes pondérées
Un couple formé d’un ensemble de sommets et d’un ensemble de paires de sommets
Un couple formé d’un ensemble de sommets et d’un ensemble de directions entre sommets
Un ensemble de chemins organisés autour d’un sommet racine

Un couple formé d’un ensemble de sommets et d’un ensemble de paires de sommets

Explication

Un graphe non orienté est constitué d’un ensemble de sommets et d’un ensemble d’arêtes, chaque arête étant une paire de sommets. Contrairement à un graphe orienté, il ne distingue pas un sens entre les deux extrémités d’une arête.

10. Dans un graphe non orienté, comment détermine-t-on le degré d’un sommet ?

En comptant les sommets accessibles depuis ce sommet
En comptant les arêtes reliant deux autres sommets
En comptant les chemins qui partent de ce sommet
En comptant les arêtes incidentes à ce sommet

En comptant les arêtes incidentes à ce sommet

Explication

Le degré d’un sommet correspond au nombre d’arêtes qui le contiennent, c’est-à-dire aux arêtes incidentes à ce sommet. Le nombre de chemins accessibles mesure une autre propriété du graphe et ne définit pas le degré.

11. Quelle propriété caractérise un arbre dans la théorie des graphes ?

C’est un graphe connexe et sans cycle
C’est une matrice carrée associée à des sommets
C’est un graphe orienté et nécessairement pondéré
C’est un graphe comportant un cycle par sommet

C’est un graphe connexe et sans cycle

Explication

Un arbre est un graphe connexe qui ne contient aucun cycle ; il peut aussi être organisé autour d’une racine et comporter des étiquettes. L’orientation, la pondération ou la représentation matricielle ne sont pas les critères définitoires d’un arbre.

12. Que représente le coefficient situé à la ligne i et à la colonne j de la matrice d’adjacence d’un graphe à n sommets ?

Le degré total des sommets i et j
Le nombre d’arêtes reliant le sommet i au sommet j
La longueur du plus court chemin de i à j
Le nombre de sommets situés entre i et j

Le nombre d’arêtes reliant le sommet i au sommet j

Explication

Le coefficient correspondant à la ligne i et à la colonne j indique le nombre d’arêtes reliant les sommets i et j. Il ne donne pas directement la longueur d’un chemin ni la somme de leurs degrés.

13. Quelle représentation associe à chaque sommet les sommets qui lui sont adjacents ?

La liste d’adjacence
La matrice d’incidence
La matrice des distances
La liste des degrés

La liste d’adjacence

Explication

Une liste d’adjacence associe chaque sommet à la liste de ses voisins. Une matrice d’adjacence réserve au contraire une case à chaque couple de sommets.

14. Dans un graphe fini non pondéré, que compte le coefficient de AkA^k situé à la ligne i et à la colonne j ?

Le nombre de sommets distincts du graphe
Le degré du sommet j après k étapes
Le nombre de chemins de longueur k de i vers j
Le nombre d’arêtes directes entre i et j

Le nombre de chemins de longueur k de i vers j

Explication

Le coefficient de AkA^k en ligne i et colonne j donne le nombre de chemins de longueur k reliant i à j. Une arête directe correspond plutôt à une information de la matrice AA elle-même, sans puissance générale.

15. Comment progresse un parcours en profondeur dans un graphe ?

Il visite tous les voisins immédiats avant de poursuivre plus loin
Il choisit le sommet dont le degré est le plus élevé à chaque étape
Il suit un voisin aussi loin que possible avant de revenir en arrière
Il examine les sommets selon l’ordre de leurs étiquettes

Il suit un voisin aussi loin que possible avant de revenir en arrière

Explication

Le parcours en profondeur descend le long d’un voisin aussi loin que possible, puis revient vers un sommet précédent lorsqu’il ne peut plus avancer. Le parcours en largeur, lui, traite d’abord les voisins immédiats du sommet courant ou initial.

16. Quel ordre de découverte décrit un parcours en largeur à partir d’un sommet initial ?

Les voisins immédiats, puis les voisins de ces voisins
Un voisin suivi de toute sa descendance avant les autres voisins
Les sommets choisis selon la longueur de leurs étiquettes
Les sommets classés par ordre décroissant de leur degré

Les voisins immédiats, puis les voisins de ces voisins

Explication

Le parcours en largeur explore d’abord les voisins du sommet initial, puis les niveaux suivants, en évitant les sommets déjà rencontrés. L’exploration d’un voisin aussi loin que possible correspond au parcours en profondeur.

17. Dans un graphe pondéré, quel problème l’algorithme de Dijkstra cherche-t-il à résoudre à partir du sommet 0 ?

Calculer uniquement les chemins entre deux voisins
Déterminer les plus courts chemins depuis le sommet 0
Construire un cycle passant par tous les sommets
Classer les sommets selon leur degré entrant

Déterminer les plus courts chemins depuis le sommet 0

Explication

Dijkstra détermine les plus courts chemins partant du sommet 0 dans un graphe pondéré, orienté ou non orienté. Il ne se limite donc pas à l’analyse des voisinages immédiats ni à la construction d’un cycle.

18. Lors de l’initialisation de Dijkstra, quelles valeurs sont attribuées aux distances avant le début des sélections ?

Toutes les distances valent 0 avant le premier parcours
La distance de départ vaut 0 et les autres valent l’infini
Toutes les distances sont fixées au poids de leur première arête
La distance de départ vaut l’infini et les autres valent 0

La distance de départ vaut 0 et les autres valent l’infini

Explication

L’algorithme connaît initialement une distance nulle pour le sommet de départ et considère les autres distances comme infinies. Il sélectionne ensuite le sommet non exploité dont la distance estimée est minimale.

19. Une fois la distance d’un sommet X connue, comment Dijkstra met-il à jour la distance d’un voisin Y ?

Il remplace la distance de Y par le poids de l’arête sans tenir compte de X
Il compare la distance actuelle de Y à la distance de X augmentée du poids de l’arête
Il additionne la distance actuelle de Y au poids de l’arête reliant X et Y
Il conserve la distance de Y dès qu’elle a été initialisée à une valeur finie

Il compare la distance actuelle de Y à la distance de X augmentée du poids de l’arête

Explication

Dijkstra compare la distance déjà connue pour Y avec le trajet passant par X, calculé en additionnant la distance de X et le poids de l’arête X-Y. La plus petite de ces deux valeurs est conservée.

20. Quelle est la définition d’une fonction de hachage utilisée pour indexer des clés ?

Une relation entre deux clés qui vérifie leur ordre alphabétique
Une procédure qui transforme chaque valeur en une liste de taille variable
Une opération qui associe chaque entier à son facteur de décomposition
Une application d’un ensemble de clés vers les entiers de 0 à n − 1

Une application d’un ensemble de clés vers les entiers de 0 à n − 1

Explication

Une fonction de hachage associe une clé de l’ensemble E à un entier compris entre 0 et n − 1, afin de déterminer une position. Elle ne sert pas à établir un ordre entre les clés.

21. Dans quelle situation parle-t-on de collision dans une table de hachage ?

Une valeur est recherchée dans une case encore vide
Deux clés distinctes produisent la même valeur de hachage
Une table contient moins de cases que de clés
Une clé possède une valeur de hachage négative

Deux clés distinctes produisent la même valeur de hachage

Explication

Il y a collision lorsque deux clés différentes sont envoyées vers la même valeur de hachage. Une valeur négative ou une case vide ne constitue pas, en elle-même, une collision.

22. Pour une clé entière x et une table de taille n, quelle expression constitue un exemple de fonction de hachage ?

h(x)=nxh(x)=n^x
h(x)=x+nh(x)=x+n
h(x)=x÷nh(x)=x\div n
h(x)=xmodnh(x)=x\bmod n

$$h(x)=x\bmod n$$

Explication

Le reste de la division de x par n, noté xmodnx\bmod n, fournit un indice compris entre 0 et n − 1. Les autres opérations ne garantissent pas cet ensemble d’indices.

23. Comment le chaînage traite-t-il plusieurs clés envoyées vers la même case d’une table de hachage ?

Il remplace la valeur déjà présente par la nouvelle clé arrivée
Il conserve la clé dans la table mais supprime sa valeur associée
Il regroupe plusieurs valeurs dans cette case, généralement sous forme de liste
Il déplace chaque collision vers une case choisie selon l’ordre d’insertion

Il regroupe plusieurs valeurs dans cette case, généralement sous forme de liste

Explication

Le chaînage conserve plusieurs valeurs dans une même case, souvent au moyen d’une liste. Le stockage direct peut au contraire écraser la valeur qui s’y trouvait lors d’une collision.

24. Quelle garantie fournit la méthode __hash__() d’un objet Python concernant la valeur renvoyée ?

Elle renvoie une adresse mémoire exprimée sous forme de nombre positif
Elle renvoie une liste contenant les objets partageant une même case
Elle renvoie un indice compris entre 0 et la taille de chaque table
Elle renvoie un entier signé compris entre 263-2^{63} et 26312^{63}-1

Elle renvoie un entier signé compris entre $$-2^{63}$$ et $$2^{63}-1$$

Explication

En Python, __hash__() renvoie un entier signé sur 64 bits, dans l’intervalle allant de 263-2^{63} à 26312^{63}-1. Cette valeur n’est pas directement une liste de collisions ni nécessairement un indice final de table.

25. Lors d’une recherche dichotomique dans une liste de clés triées, quelle opération est répétée à chaque étape ?

Insérer la clé au milieu avant de comparer les deux sous-listes
Parcourir toutes les clés pour vérifier leur égalité avec la cible
Comparer la clé recherchée au premier élément puis avancer case par case
Comparer la clé recherchée à l’élément central puis écarter la moitié incompatible

Comparer la clé recherchée à l’élément central puis écarter la moitié incompatible

Explication

La recherche dichotomique examine l’élément central et élimine la moitié de la liste qui ne peut pas contenir la clé. Elle évite ainsi le parcours séquentiel de toutes les positions.

26. Pourquoi la recherche dichotomique d’une clé dans une liste triée est-elle en O(logn)O(\log n) lorsque le calcul de l’ordre est en O(1)O(1) ?

Parce que la liste est parcourue intégralement avant chaque comparaison
Parce que chaque insertion déplace au plus un élément dans la liste
Parce que chaque comparaison réduit la zone de recherche à environ la moitié
Parce que le hachage transforme directement la clé en adresse mémoire

Parce que chaque comparaison réduit la zone de recherche à environ la moitié

Explication

Chaque étape de la recherche dichotomique divise approximativement par deux le nombre de positions candidates, ce qui conduit à une complexité logarithmique. L’insertion dans une liste triée peut toutefois rester linéaire à cause du déplacement des éléments.

Révisez avec les flashcards

Mémorisez les réponses avec 51 flashcards sur Graphes, dictionnaires et hachage.

Qu'est-ce qu'une liste de taille n en Python ?

Un n-uplet numérique ordonné d'indices de 0 à n−1 et de longueur n.

Comment concatène-t-on deux listes en Python ?

Avec l'opérateur +.

Comment répète-t-on une liste en Python ?

Avec un entier multiplicateur.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Graphes, dictionnaires et hachage.

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