• Aucun résultat trouvé

DS 1

N/A
N/A
Protected

Academic year: 2022

Partager "DS 1"

Copied!
2
0
0

Texte intégral

(1)

DS 1

Option informatique, deuxième année

Julien Reichert

Exercice 1 : Écrire en Caml une fonction minimum_ABR qui prend en entrée un arbre binaire de recherche et qui retourne la valeur minimale y figurant. Donner aussi sa signature. Définir au préalable un type adapté pour les arbres binaires de recherche.

Exercice 2 : Écrire en Caml ou en pseudo-code une fonction insertion_ABRqui prend en entrée un arbre binaire de recherche et une valeur et qui retourne l’arbre binaire de recherche obtenu en insérant la valeur dans l’arbre de départ. La structure doit être préservée, et il est préférable de faire l’insertion au niveau d’une feuille, pour simplifier.

Exercice 3 : Faire tourner à la main l’algorithme présenté dans la question précédente pour chacun des éléments, successivement et de gauche à droite, de la liste

[167; 5; 600; 654; 578; 258; 977; 663; 706; 94].

On partira évidemment d’un arbre vide. Au minimum, on dessinera chaque arbre intermédiaire, on donnera l’ex- pression en Caml du dernier et on détaillera les étapes de l’insertion de94. Rappeler comment on peut en déduire la version croissante de la liste des étiquettes des nœuds. Comprendre l’intérêt d’avoir une hauteur raisonnable.

Exercice 4 : Écrire en Caml une fonction qui prend en entrée une liste triée dans l’ordre croissant et qui retourne le plus petit écart entre deux éléments consécutifs de la liste. On ne convertira pas la liste en entrée en un tableau.

Exercice 5 : On considère une structure d’arbre binaire spéciale, dans laquelle chaque nœud porte une information supplémentaire, la hauteur du sous-arbre enraciné en ce nœud.1 Écrire en Caml une fonction qui prend en entrée un arbre de cette forme et une valeur et qui retourne l’arbre obtenu en insérant la valeur dans l’arbre de départ, sachant que le sous-arbre de hauteur la plus faible est choisi à chaque étape. Obtient-on alors nécessairement un arbre de hauteur minimale ?

En guise d’indication, on utilisera le type suivant :

type ’a arbre_hauteur = Vide | Noeud of ’a arbre_hauteur * (’a * int) * ’a arbre_hauteur;;

1. Une telle structure peut être utilisée à des fins d’équilibrage.

1

(2)

Les deux derniers exercices sont inspirés de l’excellentLivre qui rend fou de Raymond Smullyvan.

Exercice 6 : Princesse ou tigre

Le principe est simple : un certain nombre de salles fermées (sans possibilité de connaître leur contenu) peuvent abriter une princesse ou un tigre. Sur la porte de chaque salle est apposé un écriteau, et on garantit que l’écriteau énonce la vérité si la salle abrite une princesse et qu’il ment si elle abrite un tigre (si la salle est vide, l’affirmation peut indifféremment être vraie ou fausse).

Déterminer pour chacune des configurations ci-dessous le contenu des salles. Il est recommandé d’utiliser formules et notations de la logique propositionnelle.

— Écriteau de gauche : « Une au moins des cellules contient une princesse. » ; écriteau de droite : « Il y a un tigre dans l’autre cellule. » (Il n’y a pas de cellule vide ici.)

— Écriteau de gauche : « Il y a un tigre dans cette cellule ou il y a une princesse dans l’autre » ; écriteau de droite : « Il y a une princesse dans l’autre cellule. » (Ici non plus.)

— Écriteau de gauche : « La cellule de droite est vide. » ; écriteau du milieu : « Le tigre est dans la cellule de gauche. » ; écriteau de droite : « Cette cellule est vide. ». (Il y a une cellule vide, un tigre et une princesse ici.)

Exercice 7 : Vampires et fous

Considérons une population en Transylvanie où l’on peut trouver des vampires et des humains, dans les deux cas fous ou sains d’esprit. Les vampires mentent toujours et les humains sont toujours sincères. En outre, les fous se trompent toujours et les personnes saines d’esprit ne se trompent jamais. Ainsi, les humains sains d’esprit et les vampires fous diront que la Terre est ronde (ces derniers car ils pensent qu’elle est plate), par exemple.

Identifier parmi les deux personnages qui est le vampire et qui est l’humain dans chacune des situations suivantes :

— A : « Nous sommes fous. » ; B : « C’est faux ! »

— A et B : « Je suis humain. » ; A : « B est sain d’esprit. »

— A et B : « Il y a au moins un fou parmi nous. » ; A : « Je suis humain. »

— A : « B est un vampire. » ; B : « A est fou. » (On précise ici qu’exactement un des deux personnages est fou.) Si ces deux derniers exercices ont été agréables, la bibliographie de Raymond Smullyvan occupera l’esprit durant de nombreuses heures.

2

Références

Documents relatifs

// renvoie un arbre de racine e ayant l et r pour fils gauche et droit Element root(BTree bt); // renvoie l’´ el´ ement ` a la racine de l’arbre BTree leftChild(BTree bt); // renvoie

L’opération estVide teste si la file avec priorité est vide ou pas, l’opération ajouter insère dans la file un nouvel élément avec sa priorité, l’opération premier

Chercher sur Internet l‘algorithme DSW (c’est un algorithme qui prend en entrée un arbre de recherche binaire afin de réaliser son équilibrage) et l’algorithme de

[r]

d- En supposant qu’il existe une fonction point/2 qui permette de dessiner un point de coordonn´ ees (x, y), d´ efinir une fonction qui dessine la repr´ esentation graphique

L’insertion et la suppression utilisent la rotation ` a gauche et ` a droite d’un arbre lorsqu’il est trop d´ es´ equilibr´ e :.

Exercice 2 : Écrire en Caml ou en pseudo-code une fonction rechercher_ABR qui prend en entrée un arbre binaire de recherche et une valeur et qui retourne la liste des directions

Les pre- mières division d’un arbre sont utilisées pour construire une variable synthétique intégrée à une régression logistique afin de sélectionner les quelques