Examen sur les algorithmes et les structures de données, Examens de Algorithmique et programmation des applications
Christophe
Christophe28 février 2014

Examen sur les algorithmes et les structures de données, Examens de Algorithmique et programmation des applications

PDF (2 MB)
2 pages
413Numéro de visites
Description
Exercices de mathématique - examen sur les algorithmes et les structures de données. Les principaux thèmes abordés sont les suivants: exercices.
20 points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document
Aperçu2 pages / 2
Télécharger le document

ENSEIRB 2009-2010 IF 109 Electronique

Algorithmes et Structures de Données - Examen Barème /2l indicatif, durée Ih30

Lisez l'intégralité de l'énoncé avant de commencer

Exercice 1 (4 points) On s'intéresse dans cet exercice à des arbres binaires. Vous utiliserez les fonctions FlLsG(n) donnant le fils gauche d'un nœud n, et FiLSD(n) le fils droit. L'arbre vide est codé par nil. Ces arbres ne sont pas forcément complets

1. Ecrivez un algorithme TAILLEARBRE(TI) permettant de calculer le nombre de nœuds dans un arbre binaire de racine n.

2. Ecrivez un algorithme PROFARBRE(n) permettant de calculer la profondeur d'un arbre binaire de racine n.

On s'intéresse dans toute la suite à la façon dont sont implémentés les éditeurs de texte. Notez bien qu'il y a peu d'algorithmes à écrire mais que certains comportent de nombreux cas particuliers. Prenez le temps de les envisager tous.

On supposera qu'une fonction REDlMTAB(to&, n) fait en sorte que la nouvelle taille du tableau tab soit n. On supposera aussi que le caractère '\n' code la fin d'une ligne.

Pour éviter les redondances, vous pourrez définir des algorithmes auxiliaires que vous écrirez et expliquerez.

Exercice 2 (10 points) Un premier problème est de gérer efficacement l'insertion de plusieurs caractères.

1. Implémentation naïve

Une façon simple de représenter le contenu du texte (appelé "tampon", buffer en anglais) est d'utiliser un tableau de caractères. Pour représenter le texte, on utilisera une struc- ture "texte" comprenant les champs "tampon" et "taille", représentant respectivement le tableau de caractères du texte édité et sa taille.

(a) Donnez l'algorithme lNSERERCAR(T, c,p) permettant d'insérer un caractère c dans le tampon d'un "texte" T à la position p. La position p est un entier compris entre 0 (pour insérer au début du tampon) et T.taille (pour insérer à la fin du tampon). Par exemple, si T est { taille=3, tampon="tto" }, alors après appel à INSERERCAR(T, 'o ' , l ) , T vaut { taille=4, tampon="toto" }.

(b) Un usage fréquent est d'insérer des caractères un par un (lorsqu'on tape du texte). Quel est le coût de l'insertion de k caractères à la position p dans un texte qui contient n caractères avant l'insertion ?

2. Implémentation avec un "gap"1 (interstice ou trou en français) Pour améliorer les perfor- mances de l'algorithme d'insertion, on maintient en permanence dans le tampon un trou, c'est-à-dire des cases ne contenant aucun caractère utile, mais qui permettent d'insérer immédiatement un caractère au début du gap. On ajoute à la structure "texte" les champs

1Pour l'anecdote, c'est Pimplémentation qu'utilisé GNU Emacs

suivants : "debgap" l'indice de début du gap, "hngap" l'indice de la aermere case au gap, et "regap" la taille nominale du gap lorsqu'on recrée un gap au moment où il devient plein.

(a) Donnez une nouvelle version de l'algorithme INSERERCAR(T, c, p ] . Il procédera en commençant par déplacer le gap à la position p. Par exemple en partant de T valant { taille=3, tampon="tto***", debgap==3, nngap=5, regap=32 }, alors après appel à INSERER.CAR(T, 'o ' , l ) , T vaut { taille=4, tampon="to**to", debgap=2, nngap=3, regap=32 }. Dans cet exemple, on a représenté le gap comme contenant des étoiles pour le rendre visible, mais en pratique son contenu est indéterminé puisque jamais pris en considération.

(b) Quel est désormais le coût de l'insertion de k caractères à la position p dans un texte de n caractères au départ si le gap fait k caractères et se trouve au départ en position 0 ?

Exercice 3 (4 points) Un autre problème est qu'une opération courante est de sauter à une ligne particulière.

1. Dans le cas de l'implémentation naïve, écrivez l'algorithme lND!CELiGNE(T, n) qui calcule l'indice dans le tampon où se trouve le premier caractère de la ligne n, ou celui de la dernière ligne si n est trop grand.

* *_

2. Quelle est la complexité dans le pire cas de cet algorithme ?

Exercice 4 (3 points) Proposez et décrivez en quelques lignes une structure de données permettant d'implémenter les fonctions "undo" et "redo" classiques dans un éditeur de texte, Les ODérations de base à considérer sont uniquement des insertions d'un caractère à la fois.

commentaires (0)

Aucun commentaire n'a été pas fait

Écrire ton premier commentaire

Télécharger le document