Devoir Surveillé informatique MP, PC, PSI



Documents pareils
Les arbres binaires de recherche

1 Recherche en table par balayage

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

Recherche dans un tableau

ARBRES BINAIRES DE RECHERCHE

Les structures de données. Rajae El Ouazzani

INF601 : Algorithme et Structure de données

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

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

TP 1. Prise en main du langage Python

Arbres binaires de recherche

Licence Sciences et Technologies Examen janvier 2010

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

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

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

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Algorithmique I. Algorithmique I p.1/??

Quelques Algorithmes simples

Cours 1 : La compilation

MIS 102 Initiation à l Informatique

Rappels sur les suites - Algorithme

Editer un script de configuration automatique du proxy

L ARBORESCENCE. Qu est-ce qu un dossier? L arborescence?

STAGE IREM 0- Premiers pas en Python

Algorithmique, Structures de données et langage C

Introduction à MATLAB R

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

chapitre 4 Nombres de Catalan

Algorithmique et Programmation, IMA

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

Introduction : L accès à Estra et à votre propre espace Connexion Votre espace personnel... 5

Organiser le disque dur Dossiers Fichiers

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

Algorithme. Table des matières

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Quelques algorithmes simples dont l analyse n est pas si simple

ASR1 TD7 : Un microprocesseur RISC 16 bits

L exclusion mutuelle distribuée

La Gestion de fichiers Supports réalisés avec OpenOffice.org 2.3 Writer. La Gestion de fichiers. Niveau : Débutant Auteur : Antonio da Silva

Compression de Données - Algorithme de Huffman Document de Conception

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Superviseur de processus ECS

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

Présentation du langage et premières fonctions

Jean-Philippe Préaux

Initiation à la programmation en Python

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Plan du cours. Historique du langage Nouveautés de Java 7

Module d anonymisation

Algorithmique et Programmation

# 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>

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Représentation d un entier en base b

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

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

Introduction à l algorithmique et à la programmation (Info 2)

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

Programmation Web. Madalina Croitoru IUT Montpellier

La mémoire. Un ordinateur. L'octet. Le bit

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

V- Manipulations de nombres en binaire

Transmission d informations sur le réseau électrique

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

Un ordonnanceur stupide

Entraînement au concours ACM-ICPC

Algorithmes récursifs

Continuité et dérivabilité d une fonction

Organiser les informations ( approche technique )

Utilisation d objets : String et ArrayList

Bases de programmation. Cours 5. Structurer les données

Programme Compte bancaire (code)

La dernière base de données de Teradata franchit le cap du big data grâce à sa technologie avancée

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Limites finies en un point

Programmation linéaire

Groupe Eyrolles, 2004 ISBN :

as Architecture des Systèmes d Information

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cahier n o 6. Mon ordinateur. Fichiers et dossiers Sauvegarde et classement

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Découverte de Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les technologies du Big Data

Tp 1 correction. Structures de données (IF2)

Définition des Webservices Ordre de paiement par . Version 1.0

CS 01 D/B2I/ CONSULTATION ET TRANSMISSION DE L INFORMA-

Représentation des Nombres

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Le disque dur. Le disque dur est l'organe servant à conserver les données sous forme de dossiers de manière permanente.

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

CARTE DE VOEUX À L ASSOCIAEDRE

Introduction à l informatique en BCPST

Ecran principal à l ouverture du logiciel

Compte-rendu de projet de Système de gestion de base de données

Programmes des classes préparatoires aux Grandes Ecoles

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Transcription:

NOM : Classe : Devoir Surveillé informatique MP, PC, PSI L utilisation des calculatrices n est pas autorisée pour cette épreuve. Le langage de programmation choisi est Python. L espace laissé pour les réponses est suffisant (sauf si vous utilisez ces feuilles comme brouillon, ce qui est fortement déconseillé). Comparaison de deux méthodes de tri L emploi de la méthode.sort() et de la fonction max prédéfinies dans Python n est pas autorisé. Partie I/ Le tri par insertion On considère un tableau T de valeurs numériques représenté par une liste de valeurs numériques non triée. On définit une méthode intuitive pour trier la liste par ordre croissant : le tri insertion dont le pseudo-code est donné ci-dessous. procédure tri_insertion(tableau T) pour i de la deuxième valeur à la dernière valeur du tableau x T[i] j i tant que j > 0 et T[j - 1] > x T[j] T[j 1] j j 1 fin tant que T[j] x fin pour fin procédure 1- Proposer un script écrit en langage Python qui effectue le tri par insertion d un tableau de valeurs. 1/8

2- On dit que ce tri est «en place». Que signifie ce terme et en quoi est-ce un aspect positif de cette méthode de tri? 3- Donner, en justifiant brièvement, la complexité en temps de cet algorithme dans le meilleur et dans le pire des cas en fonction de n = len(t). 4- Quelle est la meilleure performance que l on puisse attendre en termes de complexité temporelle pour un tri par comparaison? À ce titre, le tri par insertion est-il performant? Partie II/ Le tri par tas Le but de cette partie est l écriture d un algorithme de tri de tableaux basé sur la notion de tas. Les questions se suivent logiquement, mais beaucoup sont indépendantes. Les fonctions définies dans les différentes questions peuvent être utilisées dans les questions suivantes même si celles-ci n ont pas été écrites complètement. A- Des fonctions élémentaires pour se déplacer dans un tableau indice 0 1 2 3 4 5 6 7 T(indice) 5 2 6 0 1 9 1 5 (a) Vision tabulaire (b) Vision arborescente (arbre binaire) Figure 1 Deux vues différentes d un même tableau La figure 1 montre qu un même tableau peut être dessiné avec des cases contigües, ou bien avec des cases dispersées dans une arborescence. Avec la vue contigüe, on utilise généralement une variable i qui parcourt les indices du tableau. 2/8

Précisons maintenant un peu plus les termes désignant les différents composants d un arbre binaire. Tout d abord, chaque élément d un arbre se nomme un nœud. Les nœuds sont reliés les uns aux autres par des relations d ordre ou de hiérarchie. Ainsi on dira qu un nœud possède un père, c est-à-dire un nœud qui lui est supérieur dans cette hiérarchie. Il possède éventuellement un ou deux fils. Il existe un nœud qui n a pas de père, on l appelle alors la racine de l arbre. Un nœud qui n a pas de fils est appelé feuille ou nœud externe. Tout autre nœud de l arbre sera appelé nœud interne. Voici donc un schéma qui résume les différents composants d un arbre : (a) Structure d un arbre binaire (b) Arbre binaire complet Figure 2 Généralités sur les arbres Le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine, est appelé hauteur de l arbre. Le niveau d un nœud est appelé profondeur. Sur la figure 2b, l arbre a une hauteur égale à 2. On appellera arbre binaire complet tout arbre qui est localement complet, dont chaque nœud interne possède deux fils et dont toutes les feuilles ont la même profondeur. Dans ce type d arbre, on peut exprimer le nombre de nœuds n de l arbre en fonction de la hauteur h : n = 2 h+1-1. Avec la vue arborescente, on peut évidemment utiliser une variable i qui parcourt les indices du tableau, mais on utilise également trois fonctions qui permettent de suivre les liens bidirectionnels (réels ou virtuels) de l arborescence : - gauche(indice) représente les liens pointillés du haut vers le bas de l arborescence. Par exemple, dans la figure 1b, gauche(1)=3, gauche(4)=9 et gauche(2)=5. - droite(indice) représente les liens en trait plein du haut vers le bas de l arborescence. Par exemple, dans la figure 1b, droite(1)=4, droite(3)=8 et droite(0)=2. - pere(indice) représente les liens du bas vers le haut de l arborescence. Par exemple, dans la figure 1b, pere(4)=1, pere(7)=3 et pere(2)=0. Par contre pere(0) n est pas défini, et sa valeur (null,-1,0, ) importe peu car jamais utilisée dans cet exercice. Voici un programme Python possible pour la fonction gauche(indice), de complexité temporelle en O(1) : def gauche (indice) : '' '' '' Retourne le lien à gauche vers le bas de l'arborescence '' '' '' return 2*indice+1 5- Écrire un programme Python droite(indice) qui retourne un entier d tel qu il existe un lien en trait plein du haut vers le bas reliant les indices i à d. La complexité en temps doit être en O(1). 3/8

6- Écrire un programme Python pere(indice) qui retourne un entier p tel qu il existe un lien du bas vers le haut reliant les indices i à p. La complexité en temps doit être en O(1). B- Construction d un tas à partir d un tableau. Un tas est un tableau d entiers tel que pour tous les indices i strictement positifs, la valeur de T[i] est inférieure ou égale à celle de T[pere(i)]. Le but de cette partie de l exercice est d effectuer la transformation représentée par la figure 3. (a) Vue arborescente du tableau initial (b) Tas obtenu par construction Figure 3 Construction d un tas 7- Écrire un programme Python estuntas(t) qui retourne True si le tableau T est un tas, False sinon. La complexité en temps doit être en O(n) avec n = len(t). 4/8

8- Pour un tableau T d éléments T[i], on définit une valeur limite telle que 0 i limite et limite longueur(t). Définir une fonction maximum(t,i,limite) qui retourne l indice (inférieur à limite) de la plus grande des trois valeurs T[i], T[gauche(i)] et T[droite(i)]. Si on note imax la valeur retournée par la fonction maximum(t,i,limite), imax a donc les propriétés suivantes : imax limite imax i, gauche( i), droite( i) T[ imax] T[ i] gauche( i) limite T[ imax] T[ gauche( i)] droite( i) limite T[ imax] T[ droite( i)] En cas de valeurs égales, le plus petit indice est retourné. Par exemple sur la figure 3a, maximum(t,0,8) = 2, maximum(t,2,8) = 5, maximum(t,3,8) = 7 et maximum(t,3,7) = 3. La complexité en temps doit être en O(1). 9- Soit l algorithme récursif écrit en langage Python suivant : def entasserrecursif (T,i,limite) : imax = maximum(t,i,limite) if imax!= i : echange (T,i,iMax ) entasserrecursif (T,iMax,limite) Justifier pourquoi cet algorithme est récursif. avec : def echange (T, i, j) : aux = T[i] T[i] = T[j] T[j] = aux 10- Compléter l arborescence avec les valeurs du tableau après l appel entasserrecursif(t,0,8). (a) Avant entasser Figure 4 Entasser(T,0,8) 5/8 (b) Après entasser

11- Proposer un algorithme non récursif écrit en langage Python que l on nommera entasser(t,i,limite) équivalent à l algorithme récursif entasserrecursif(t,i,limite). 12- Donner les complexités en temps dans le meilleur et dans le pire des cas de l algorithme entasser(t,i,limite) en fonction de n = len(t). 13- L algorithme entasser(t,i,limite) échange des valeurs du tableau de haut en bas, en suivant une branche de l arborescence. Cela a pour effet de faire descendre des petites valeurs, et de faire monter les grandes valeurs. Il est donc possible de construire un tas, en itérant cet algorithme sur les indices décroissants du tableau. En utilisant entasserrecursif(t,i,limite) ou entasser(t,i,limite), proposer un algorithme construiretas(t), écrit en langage Python, qui transforme un tableau en un tas. 14- Donner la complexité en temps dans le meilleur et dans le pire des cas de l algorithme construiretas(t) en fonction de n = len(t). 6/8

15- Tri d un tas. Le but de cette partie de l exercice est d effectuer la transformation représentée par la figure 5. (a) Tas initial (b) Vue arborescente du tableau trié Figure 5 Tri d un tas a) Dans un tas, la valeur maximale est à la racine de l arborescence, donc en T[0]. Dans le tableau trié, cette valeur doit être en T[len(T)-1]. Il suffit donc d échanger ces deux valeurs pour progresser vers la solution. Une fois cet échange fait, si l on exclut la dernière valeur du tableau, le tas est peu changé. En fait entasser(t,0,len(t)-1) va créer un nouveau tas pour les valeurs du tableau dont les indices sont inférieurs à limite = len(t)-1. Il suffit donc d itérer ces deux étapes (échange, entasser) pour trier un tas. Écrire un algorithme triertas(t) en langage Python qui transforme un tas en un tableau trié en ordre croissant. b) Donner la complexité en temps dans le meilleur et dans le pire des cas de l algorithme triertas(t) en fonction de n = len(t). c) Écrire un algorithme tripartas(t) en langage Python qui trie un tableau d entiers T en construisant d abord un tas, puis en le triant. 7/8

d) Donner la complexité en temps dans le meilleur et dans le pire des cas l algorithme tripartas(t) en fonction de n = len(t). Commenter. FIN DU SUJET 8/8