EXAMEN FINAL. 2 Février 2006-2 heures Aucun document autorisé



Documents pareils
Définitions. Numéro à préciser. (Durée : )

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Les structures de données. Rajae El Ouazzani

INF601 : Algorithme et Structure de données

LE PROBLEME DU PLUS COURT CHEMIN

Chapitre 5 : Flot maximal dans un graphe

Architecture des Systèmes d Information Architecture des Systèmes d Information

ARBRES BINAIRES DE RECHERCHE

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

1 Recherche en table par balayage

Plus courts chemins, programmation dynamique

Introduction à la théorie des graphes. Solutions des exercices

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Resolution limit in community detection

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

La mesure de Lebesgue sur la droite réelle

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Quelques Algorithmes simples

Recherche dans un tableau

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Algorithmes de recherche

Algorithmique, Structures de données et langage C

Université Paris-Dauphine DUMI2E 1ère année, Applications

Exemples de problèmes et d applications. INF6953 Exemples de problèmes 1

Le théorème de Perron-Frobenius, les chaines de Markov et un célèbre moteur de recherche

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

V- Manipulations de nombres en binaire

Algorithmique et Programmation, IMA

Les arbres binaires de recherche

Sommaire. Structure. Liste simplement chaînée ALGORITHME ET STRUCTURES DE DONNÉES II

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

4. Les structures de données statiques

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

données en connaissance et en actions?

Intégration et probabilités TD1 Espaces mesurés

Limites finies en un point

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Correction du baccalauréat ES/L Métropole 20 juin 2014

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

L exclusion mutuelle distribuée

EXCEL TUTORIEL 2012/2013

Objets Combinatoires élementaires

Chapitre 2 Le problème de l unicité des solutions

Chp. 4. Minimisation d une fonction d une variable

Le langage SQL Rappels

Rappels sur les suites - Algorithme

Cours d Analyse. Fonctions de plusieurs variables

Arbres binaires de recherche

Traitement des données avec Microsoft EXCEL 2010

Quelques algorithmes simples dont l analyse n est pas si simple

Image d un intervalle par une fonction continue

Algorithmique et structures de données I

MIS 102 Initiation à l Informatique

Correction TD Algorithmique 5.3 Pile Liste 5.3 Pile

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

REALISATION d'un. ORDONNANCEUR à ECHEANCES

1. Introduction Création d'une requête...2

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Initiation à LabView : Les exemples d applications :

Feuille TD n 1 Exercices d algorithmique éléments de correction

Algorithmes récursifs

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Fonctions de plusieurs variables

TP3 : Manipulation et implantation de systèmes de fichiers 1

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

Cours3. Applications continues et homéomorphismes. 1 Rappel sur les images réciproques

Algorithmique et Programmation

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

chapitre 4 Nombres de Catalan

Java Licence Professionnelle CISII,

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :


Théorie de la mesure. S. Nicolay

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Théorie et codage de l information

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Utilitaires méconnus de StrataFrame

Jeux sous forme extensive (Jeux dynamiques)

Adama MBODJI MBODJ.SYSTEM

Les deux points les plus proches

Séminaire TEST. 1 Présentation du sujet. October 18th, 2013

Exercices - Polynômes : corrigé. Opérations sur les polynômes

UE C avancé cours 1: introduction et révisions

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Le Système d Information Routier

3 Approximation de solutions d équations

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INFO-F-425 Modèles mathématiques et algorithmes pour l ordonnancement. Bernard Fortz

Correction du baccalauréat S Liban juin 2007

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

ÉPREUVE COMMUNE DE TIPE Partie D

Transcription:

MIE - E ANNÉE ALGORITHMIQUE GÉNÉRALE Vincent Mousseau EXAMEN FINAL Février 006 - heures Aucun document autorisé Exercice : On s intéresse à la gestion informatique des réservations sur l année d une salle de conférences. La salle ne peut être réservée que par journées complètes. Ainsi, une réservation peut être assimilée à un intervalle de jours I = [u(i), v(i)], où u(i) est le jour d arrivée des participants et v(i) le dernier jour de la conférence. Au cours de l année, les clients potentiels envoient au gestionnaire de la salle des demandes de réservations sous la forme d un intervalle. Celui-ci doit vérifier qu aucune demande antérieure n intersecte cette demande. Dans ce cas, il peut accepter cette réservation. Il arrive, enfin, que des clients annulent une réservation. Il existe donc trois opérations de base à réaliser : Intersecte(I) est une fonction qui renvoie Vrai lorsqu il existe une réservation antérieure qui intersecte I. Ajouter(I) ajoute un intervalle disjoint à l ensemble des réservations. Supprimer(I) supprime une réservation. a) On suppose que les réservations acceptées sont gérées à l aide d une liste simplement chaînée. Donner les déclarations de ce type LISTINTERVAL. Indiquer la complexité des trois opérations de base, lorsque la liste est quelconque, puis lorsque la liste est triée selon les u(i) croissant. Justifier votre réponse. b) On suppose maintenant que les réservations sont stockées dans un arbre binaire de recherche et que la clé d un intervalle I est u(i). Les sommets comporteront donc, en plus des champs habituels fgauche, fdroit et pere, les champs u,v représentant les bornes de l intervalle associé au sommet. On notera ABRI le type correspondant. Donnez les déclarations de ce type. c) Représentez graphiquement l arbre binaire de recherche (de type ABRI) correspondant aux réservations successives (dans l ordre) [7,9], [,7], [00,0], [50,68], [0,0], [,] et [8,9]. d) Ecrire l algorithme Intersecte(I :intervalle, A :ABRI) et analyser sa complexité. Exercice : On considère un type LISTENT représentant des listes simplement chaînées d entiers. Dans tout l exercice, vous utiliserez, sans les re-écrire, les primitives sur les listes. Toutefois, pour chacune des primitives utilisées, vous en rappellerez la définition précise. a) Ecrire deux algorithmes, l un récursif, l autre itératif, permettant de calculer la somme des éléments de la liste. b) Ecrire l algorithme itératif permettant de supprimer toutes les occurrences de l entier n de la liste L. c) Ecrire l algorithme itératif permettant de supprimer la première occurrence de l entier n de la liste L. d) En supposant que les listes L et L ne peuvent pas comporter de doublons, écrire un algorithme récursif permettant de déterminer la liste L intersection des listes L et L. e) Analyser la complexité de l algorithme de la question d) en fonction de la complexité des primitives.

Exercice : Un graphe G = (X,Y ) est défini par un ensemble de noeuds X et un ensemble d arcs Y (un arc (x,y) est représenté dans le schéma ci-dessous par une flèche du noeud x au noeud y). S il existe un arc (x,y) dans le graphe G, on dit que y est successeur de x et que x est prédécesseur de y (dans l exemple, 5 est successeur de et est prédécesseur de 5). La figure ci-dessous représente le graphe pour lequel X = {,,,,5,6} et Y = {(,5),(,),(,), (, ),(,), (, 5),(5,6),(6, )}. 5 6 Il est classique de représenter un graphe en, stockant pour chacun de ses noeuds x X la liste de ses successeurs. Ainsi, pour l exemple précédent, on a : successeurs() = (,, 5), successeurs() = (,, 5), successeurs() = successeurs() = (), successeurs(5) = (6), successeurs(6) = (). Dans cette perspective on considère les déclarations suivantes : Max=00 lien= cellule cellule=enregistrement noeud :entier suiv :lien Graphe=Enregistrement taille :entier tab :Tableau[Max] de lien a) Représentez l état de la mémoire lorsque le graphe ci-dessus est stockée dans une variable G de type Graphe b) Ecrire l algorithme AJOUTARC(i,j,G) qui ajoute en O() un arc allant du noeud i au noeud j dans le graphe G. c) On peut stocker un graphe dans G une variable de type Graphe en considérant que les liste chaînées correspondent aux listes de prédécesseurs (au lieu de liste de successeurs). Représentez l état de la mémoire lorsque le graphe ci-dessus est stockée dans une variable G de type Graphe en considérant que les listes chaînées représentent la liste des prédécesseurs des noeuds. d) On cherche à définir la représentation d un graphe en terme de listes de prédécesseurs (cf. c)) à partir de sa représentation en terme de liste de successeurs. Ecrire un algorithme qui, en O(m) (m étant le nombre d arc du graphe), calcule la représentation d un graphe en terme de listes de prédécesseurs à partir de sa représentation en terme de liste de successeurs. On pourra utiliser l algorithme AJOUTARC.

Exercice : a) On suppose que les réservations acceptées sont gérées à l aide d une liste simplement chaînée. Donner les déclarations de ce type LISTINTERVAL. Indiquer la complexité des trois opérations de base, lorsque la liste est quelconque, puis lorsque la liste est triée selon les u(i) croissant. Justifier votre réponse. lien= cellule cellule=enregistrement u,v :entier suiv :lien LISTINTERVAL=lien Si la liste chaînée est quelconque et comporte n éléments, alors l ajout d un élément peut se faire en complexité constante O() (ajout en tête). Mais pour recherche un élément ou comparer les éléments avec un intervalle donné pour savoir s ils l intersectent, il faut parcourir entièrement la liste, d où une complexité en O(n). Lorsque la liste chaînée est triée selon les u(i) croissants, dans le pire des cas, le paramètre I d Intersecte ou de Ajoute a une borne inférieure u(i) qui est supérieure à celle des autres intervalles ce qui nécessite le parcours complet de la liste. Il en est de même lorsque l on supprime le dernier intervalle. Les trois opérations ont donc une complexité en O(n). b) On suppose maintenant que les réservations sont stockées dans un arbre binaire de recherche et que la clé d un intervalle I est u(i). Les sommets comporteront donc, en plus des champs habituels fgauche, fdroit et pere, les champs u,v représentant les bornes de l intervalle associé au sommet. On notera ABRI le type correspondant. Donnez les déclarations de ce type. lien= cellule cellule=enregistrement u,v :entier fgauche,fdroit,pere :lien ABRI= cellule c) Représentez graphiquement l arbre binaire de recherche correspondant aux réservations successives (dans l ordre) [7,9], [,7], [00,0], [50,68], [0,0], [,] et [8,9]. [7,9] [,7] [00,0] [,] [0,0] [50,68] [8,9]

d) Ecrire l algorithme Intersecte(I,A) et analyser sa complexité. Intersecte(I :intervalle, A :ABRI) booléen Si (A=Null) Alors Retourner(faux) Sinon si (u(i)<a.u) alors si (v(i)<a.u) alors Retourner (intersecte(i,a.g) sinon Retourner (vrai) sinon si (u(i)<a.v) alors Retourner (intersecte(i,a.d) sinon Retourner (vrai) Fin Si Exercice : On considère un type LISTENT représentant des listes simplement chaînées d entiers. Dans tout l exercice, vous pourrez utiliser, sans les re-écrire, les primitives sur les listes. Toutefois, pour chacune des primitives utilisées, vous en rappellerez la définition précise. a) Ecrire deux algorithmes, l un récursif, l autre itératif, permettant de calculer la somme des éléments de la liste. somme-iter(l :Liste) entier somme 0 p Premier(L) Tant que (p Fin(L)) faire somme somme+acceder(p,l) p Suivant(p) Fin Tant que retourner(somme) considérer comme juste les deux versions suivantes : somme-recu(l :Liste) entier Si (Premier(L) = Fin(L)) alors retourner(0) alors retourner(0) Sinon retourner(acceder(p,l)+somme-recu(l.suiv) somme-recu(l :Liste) entier Si (Premier(L) = Fin(L)) alors retourner(0) alors retourner(0) L Supprimer(premier(L),L) Sinon retourner(acceder(p,l)+somme-recu(l )

b) Ecrire l algorithme itératif permettant de supprimer toutes les occurrences n dans L. retire-tout-iter(c : caractère L :Liste) Liste p premier(l) Tant que (p Fin(L)) faire Si (Acceder(p,L)=c) alors Supprimer(p,L) sinon p Suivant(p,L) Fin Tant que retourner(l) c) Ecrire l algorithme itératif permettant de supprimer la première occurrence n dans L. inter(c : caractère L :Liste) Liste p premier(l) Tant que (p Null) et (Acceder(p,L) c) faire p Suivant(p,L) Fin Tant que Si (p Null) alors Supprimer(p,L) retourner(l) d) En supposant que les listes L et L ne peuvent comporter de doublons, écrire un algorithme récursif permettant de déterminer la liste L intersection des listes L et L. inter(l,l) Liste L Liste vide p Premier(L) Tant que (p Fin(L)) faire x Acceder(p,L) q Premier(L) Tant que (q Fin(L) et (Acceder(q,L) x) faire q Suivant(q,L) Fin tant que Si (q Fin(L)) alors Inserer(x,Fin(L),L) p Suivant(p,L) Fin Tant que retourner(l) e) Analyser la complexité de l algorithme de la question d) en fonction de la complexité des primitives. Supposons que chacune des primitives utilisées (Fin, Suivant, Premier, Inserer) sont en O() (c est le cas pour une mise en oeuvre par liste simplement chaînée). Le pire cas intervient lorsque L et L n ont aucun élément commun. Soit n et n la longueurs de L et L. Pour chaque élément de L, il faut le comparer à tous les éléments de L. On est donc en O(n n ). 5

Exercice : Un graphe G = (X,Y ) est défini par un ensemble de noeuds X et un ensemble d arcs Y (un arc (x,y) est représenté dans le schéma ci-dessous par une flèche du noeud x au noeud y). S il existe un arc (x,y) dans le graphe G, on dit que y est successeur de x et que x est prédécesseur de y (dans l exemple, 5 est successeur de et est prédécesseur de 5). La figure ci-dessous représente le graphe pour lequel X = {,,,,5,6} et Y = {(,5),(,),(,), (, ),(,), (, 5),(5,6),(6, )}. 5 6 a) Il est classique de représenter un graphe en, stockant pour chacun de ses noeuds x X la liste de ses successeurs. Ainsi, pour l exemple précédent, on a : successeurs() = (,, 5), successeurs() = (,, 5), successeurs() = () successeurs() = (), successeurs(5) = (6), successeurs(6) = (). Dans cette perspective on considère les déclarations suivantes : Max=00 lien= cellule cellule=enregistrement noeud :entier suiv :lien Graphe=Enregistrement taille :entier tab :Tableau[Max] de lien Représentez l état de la mémoire lorsque le graphe ci-dessus est stockée dans une variable G de type Graphe 6

5 6 7 8 5 5 6. b) Ecrire l algorithme AJOUTARC(i,j,G) qui ajoute en O() un arc allant du noeud i au noeud j dans le graphe G. Ajoutarc(i,j :entier, G :Graphe) Allouer(nv) nv.suiv G.tab[i] nv.noeud j G.tab[i] nv c) On peut stocker un graphe dans G une variable de type Graphe en considérant que les liste chaînées correspondent aux listes de prédécesseurs (au lieu de liste de successeurs). Représentez, en mémoire le graphe ci-dessus dans une variable de type Graphe en considérant que les listes chaînées représentent la liste des prédécesseurs des sommets. d) On cherche à définir la représentation d un graphe en terme de listes de prédécesseurs (cf. c)) à partir de sa représentation en terme de liste de successeurs. Ecrire un algorithme qui, en O(m) (m étant le nombre d arc du graphe), calcule la représentation d un graphe en terme de listes de prédécesseurs à partir de sa représentation en terme de liste de successeurs. On pourra utiliser l algorithme AJOUTARC. Listpred(G :Graphe) Graphe G Graphe vide G.taille G.taille pour i= à G.taille faire p G[i] Tant que (p Null) faire Ajoutarc(p.noeud,i,G ) Fin tant que Fin pour Retourner(G ) 7

6 5 6 5 7 8. 8