Plan du cours : les Arbres Généraux (2) LI101 : Programmation Récursive. Schéma récursif sur les arbres généraux

Documents pareils
Module : programmation site Web dynamique Naviguer entre les pages via site map

Séance d ED n 5 : HTML et JavaScript

Réseaux. 1 Généralités. E. Jeandel

Les arbres binaires de recherche

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Pack Fifty+ Normes Techniques 2013

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

CREATION d UN SITE WEB (INTRODUCTION)

Les structures de données. Rajae El Ouazzani

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

Le Modèle de Sécurité dans JAVA

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Proxies,, Caches & CDNs

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TIC. Réseau informatique. Historique - 1. Historique - 2. TC - IUT Montpellier Internet et le Web

Logiciels de référencement

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

WebSSO, synchronisation et contrôle des accès via LDAP

Programmation Internet Cours 4

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

HMTL. Exemple de fichier HTML. Structure d un document HTML. Exemple de fichier HTML. Balises HTML. IFT1147 Programmation Serveur Web avec PHP

Informatique : Création de site Web Master 2 ANI TP 1

TD HTML AVEC CORRECTION

(structure des entêtes)

4 Exemples de problèmes MapReduce incrémentaux

Formation HTML / CSS. ar dionoea

Le serveur HTTPd WASD. Jean-François Piéronne

Les services usuels de l Internet

L exclusion mutuelle distribuée

INF601 : Algorithme et Structure de données

Introduction à la Programmation Parallèle: MPI

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation Web. Madalina Croitoru IUT Montpellier

Les sites web avec NVU

Architecture Multi-Niveaux

HTML. Notions générales

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Développement Web. Les protocoles

(51) Int Cl.: H04L 29/06 ( ) G06F 21/55 ( )

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Document Object Model (DOM)

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

Licence Sciences et Technologies Examen janvier 2010

ENVOI EN NOMBRE DE Mails PERSONNALISES

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

Les outils de création de sites web

Examen Médian - 1 heure 30

Bernard Lecomte. Débuter avec HTML

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Protocoles Applicatifs

Mysql avec EasyPhp. 1 er mars 2006

Documentation CAS à destination des éditeurs

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

ING & NEWSLETTER NEWSLETTER RESPONSIVE

Algorithmique et structures de données I

Formation : WEbMaster

Aspects techniques : guide d interfaçage SSO

Glossaire des nombres

Programmation C++ (débutant)/instructions for, while et do...while

Cours d algorithmique pour la classe de 2nde

Gestion Électronique de Documents et XML. Master 2 TSM

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Une nouvelle approche de détection de communautés dans les réseaux sociaux

Démonstration de la mise en cache via HTML 5 sur iphone

Résolution de systèmes linéaires par des méthodes directes

Notes de cours Practical BigData

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

OCL - Object Constraint Language

Certificat Big Data - Master MAthématiques

STAGE IREM 0- Premiers pas en Python

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

WEB-OFFICE-FORMATION.FR FORMATION PROFESSIONNELLE CONTINUE ET DEVELOPPEMENT DE SITES WEB CATALOGUE 2013

Attaques de type. Brandon Petty

Optimiser moteur recherche

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Comparaison de fonctions Développements limités. Chapitre 10

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

données en connaissance et en actions?

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours d Algorithmique et de Langage C v 3.0

Travaux dirigés n 10

6605 MFP 3615 MFP. Sommaire : Paramètres généraux. Réglages de l Horloge et des Bacs. Paramètre Copie (par défaut) Paramètres Réseaux (IP)

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

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)

LES GRANDES ETAPES DE CREATION D UN WEB DESIGN

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

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

Document de spécification du logiciel VALPO Définition du format des fichiers des

FORMATION / CREATION DE SITE WEB / 4 JOURNEES Sessions Octobre 2006

Initiation à l algorithmique

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Initiation aux techniques du Web. Cours L2 sciences cognitives séance 2 Charif HAYDAR: alchiekc@loria.fr

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Transcription:

Plan du cours : les Arbres Généraux (2) LI101 : Programmation Récursive c Equipe enseignante Li101 Université Pierre et Marie Curie Semestre : Automne 2008 Cours 11 : Arbres généraux (2) Plan Récursion Schéma Profondeur Liste préfixe Exemples d application Recueils des exercices Numérotation des noeuds Recherche d un noeud Traduction d un AG en HTML Rappel : récursion sur les arbres généraux Schéma récursif sur les arbres généraux Un arbre général est constitué : d une étiquette et d une forêt (liste) d arbres généraux Pour traiter un arbre général : traiter son étiquette traiter sa forêt (tous ses descendants directs) traiter chaque arbre de la forêt (parcourir la liste) On utilise généralement une récursion croisée On pourra utiliser les itérateurs map et reduce. Récursion sur un arbre ; ; ; arbrerec : ArbreGeneral[α] -> β (define (arbrerec G) (combinaison1 (ag-etiquette G) (foretrec (ag-foret G))) ) Récursion sur une forêt ; ; ; foretrec : Foret[α] -> γ ; ; ; ou aussi : foretrec : Liste[ArbreGeneral[α]] -> γ (define (foretrec F) (combinaison2 (arbrerec (car F)) (foretrec (cdr F))) base))

Schéma récursif sur les arbres généraux Nombre de noeuds Avec les itérateurs map et reduce. Récursion sur une forêt ; ; ; foretrec : Foret[α] -> γ ; ; ; ou aussi : foretrec : Liste[ArbreGeneral[α]] -> γ (define (foretrec F) (reduce combinaison2 base (map arbrerec F)) ) Récursion sur un arbre ; ; ; arbrerec : ArbreGeneral[α] -> β (define (arbrerec G) (combinaison1 (ag-etiquette G) (reduce combinaison2 base (map arbrerec (ag-foret G)))) ) Calcul du nombre de nœuds ; ; ; nombre-noeuds-arbre : ArbreGeneral[α] -> Nat ; ; ; (nombre-noeuds-arbre G) rend le nombre de nœuds de G (define (nombre-noeuds-arbre G) ; ; nombre-noeuds-foret : Foret[α] -> Nat ; ; (nombre-noeuds-foret F) rend le nombre de nœuds de F (define (nombre-noeuds-foret F) (+ (nombre-noeuds-arbre (car F)) (nombre-noeuds-foret (cdr F))) 0) ) (+ 1 (nombre-noeuds-foret (ag-foret G))) ) Nombre de nœuds version avec itérateurs Calcul du nombre de nœuds avec map et reduce ; ; ; nombre-noeuds-arbre : ArbreGeneral[α] -> Nat ; ; ; (nombre-noeuds-arbre G) rend le nombre de nœuds de G (define (nombre-noeuds-arbre G) ; ; nombre-noeuds-foret : Foret[α] -> Nat ; ; (nombre-noeuds-foret F) rend le nombre de nœuds de F (define (nombre-noeuds-foret F) (reduce + 0 (map nombre-noeuds-arbre F))) (+ 1 (nombre-noeuds-foret (ag-foret G))) ) ou mieux Calcul du nombre de nœuds (en vrai Scheme) (define (nombre-noeuds-arbre G) (reduce + 1 (map nombre-noeuds-arbre (ag-foret G))) ) Profondeur Calcul de la profondeur d un arbre ; ; ; ag-profondeur : ArbreGeneral[α] -> Nat ; ; ; (ag-profondeur G) rend la profondeur de G (define (ag-profondeur G) ; ; foret-prof : Foret[α] -> Nat ; ; (foret-prof F) rend la profondeur de F (define (foret-prof F) (max (ag-profondeur (car F)) (foret-prof (cdr F))) 0) ) (+ 1 (foret-prof (ag-foret G))) ) ou mieux Calcul de la profondeur (en vrai Scheme) (define (ag-profondeur G) (+ 1 (reduce max 0 (map ag-profondeur (ag-foret G)))) )

Liste préfixe Arbre représentant les recueils d exercices Liste préfixe d un arbre ; ; ; ag-liste-prefixe : ArbreGeneral[α] -> Liste[α] ; ; ; (ag-liste-prefixe G) rend la liste préfixe des étiquettes de G (define (ag-liste-prefixe G) ; ; foret-liste-prefixe : Foret[α] -> Liste[α] ; ; (foret-liste-prefixe F) rend la liste préfixe des étiquettes de F (define (foret-liste-prefixe F) (append (ag-liste-prefixe (car F)) (foret-liste-prefixe (cdr F))) (list)) ) (cons (ag-etiquette G) (foret-liste-prefixe (ag-foret G))) ) ou mieux Liste préfixe d un arbre (en vrai Scheme) (define (ag-liste-prefixe G) (reduce append () (map ag-liste-prefixe (ag-foret G))) ) Arbre représentant les recueils d exercices Liste des exercices

Liste des exercices Algorithme Récupérer toutes les étiquettes des feuilles d un arbre général G cas de base : G est une feuille on rend la liste constituée de l étiquette de cette feuille cas général : noeud qui possède une forêt l étiquette de la racine ne nous intéresse pas lister les étiquettes en feuille de tous les arbres de la forêt et en faire une liste Liste des exercices Liste des feuilles d une foret ; ; ; liste-exos-foret : Foret[alpha] -> Liste[alpha] ; ; ; (liste-exos-foret F) rend la liste des etiquettes en feuille des arbres de la foret (define (liste-exos-foret F) (append (liste-exos (car F)) (liste-exos-foret (cdr F))) (list))) Liste des feuilles d un arbre ; ; ; liste-exos : ArbreGeneral[alpha] -> Liste[alpha] ; ; ; (liste-exos AG) rend la liste des etiquettes en feuille de AG (define (liste-exos AG) (if (ag-feuille? AG) (list (ag-etiquette AG)) (liste-exos-foret (ag-foret AG)))) Liste des exercices (version map/reduce) Table des matières Liste des feuilles d un arbre (version map/reduce) ; ; ; liste-exos : ArbreGeneral[alpha] -> Liste[alpha] ; ; ; (liste-exos AG) rend la liste des etiquettes en feuille de AG (define (liste-exos-map AG) (if (ag-feuille? AG) (list (ag-etiquette AG)) (reduce append () (map liste-exos-map (ag-foret AG)))))

Table des matières Construction de la table des matières Algorithme Récupérer toutes les étiquettes de l arbre et leur ajouter leur niveau dans le recueil (numérotation) la racine est le titre du livre et est de niveau 1 chaque chapitre porte 2 numéros 1.N c 1 correspond au titre du livre Nc est numéro du chapitre chaque section porte 3 numéros : 1.N c.n s 1 correspon titre du livre, N c au numéro de chapitre Ns est le numéro de la section dans le chapitre chaque exercice porte 4 numéros : 1.N c.n s.n e 1, N c, N s : le numéro de la section N e est le numéro de l exercice dans la section Algorithme On a besoin de la valeur de la numérotation (niveau) n de la racine pour numéroter les noeuds de l arbre AG cas de base : AG est une feuille on rend la liste contenant l étiquette de AG en lui rajoutant le numéro n en tête cas général : AG possède une forêt on traite l étiquette en lui rajoutant le numéro n en tête on construit la liste des étiquettes des sous-arbres, on donne au sous-arbres leur numéro local i.e dans la foret : 1 pour le premier, 2 pour le second... on ajoute n devant tous les numéros obtenus Fonctions utiles (1) Convertir un chiffre en une chaîne ; ; ; chiffre->string : Nat -> string ; ; ; (chiffre->string n) rend la chaine représentant n ; ; ; Hypothese : n est plus petit que 10 (define (chiffre->string n) (cond ((= n 0) 0 ) ((= n 1) 1 ) ((= n 2) 2 ) ((= n 3) 3 ) ((= n 4) 4 ) ((= n 5) 5 ) ((= n 6) 6 ) ((= n 7) 7 ) ((= n 8) 8 ) (else 9 ))) Fonctions utiles (2) Convertir un entier naturel en une chaîne ; ; ; nombre->string : Nat -> string ; ; ; (nombre->string n) rend la chaine représentant n (define (nombre->string n) (if (< n 10) (chiffre->string n) (string-append (nombre->string (quotient n 10)) (chiffre->string (remainder n 10)))))

Fonctions utiles (3) Liste des étiquettes numérotées d un AG de niveau n Ajouter un numéro à une étiquette d un arbre ; ; ; ajouten-etiquette : Nat * ArbreGeneral[string] -> String ; ; ; (ajouten-etiquette n AG) rend l étiquette de AG préfixée n : (define (ajouten-etiquette n AG) (string-append (nombre->string n) : (ag-etiquette AG))) ; ; ; listeetiqnum-arbre : Nat * ArbreGeneral[String] -> Liste[String] cas de base : AG est une feuille on rend la liste contenant l étiquette de AG préfixée par son numéro n cas général : AG possède une forêt construire la liste des étiquettes des sous-arbres, il faut donner aux sous-arbres leur niveau dans la foret : 1 pour le premier, 2 pour le second... ; ; ; listeetiqnum-foret : Nat * Foret[String] -> Liste[String] ajouter n, le niveau de AG, devant tous les numéros obtenus construire la liste finale = ajouter en tête de la liste obtenue l étiquette de AG préfixée par son numéro n Liste des étiquettes numérotées d un AG de niveau n Liste des étiquettes numérotées d une forêt ; ; ; listeetiqnum-arbre : Nat * ArbreGeneral[String] -> Liste[String] ; ; ; (listeetiqnum-arbre n AG) rend la liste des etiquettes de AG préfixées ; ; ; par leur niveau dans l arbre. n donne le niveau de l etiquette de AG. (define (listeetiqnum-arbre n AG) ; ; ; metnentete : String->String ; ; ; (metnentete s) rend s prefixee par n (define (metnentete s) (string-append (nombre->string n). s)) (cons (ajouten-etiquette n AG) (map metnentete (listeetiqnum-foret 1 (ag-foret AG))))) Liste des étiquettes numérotées d une forêt ; ; ; listeetiqnum-foret : Nat*Foret[String] -> Liste[String] ; ; ; (listeetiqnum-foret n F) rend la liste des étiquettes de F avec leur ; ; ; numérotation dans la forêt en comptant à partir de n : ; ; ; le premier arbre de F a le numéro n, le second (n + 1),... (define (listeetiqnum-foret n F) (append (listeetiqnum-arbre n (car F)) (listeetiqnum-foret (+ n 1) (cdr F))) (list)))

Table des matières Recherche d un noeud dans un AG Pour obtenir la table des matières, il ne manque plus que la fonction : Table associée à un AG ; ; ; tdm : ArbreGeneral[String] -> Liste[String] ; ; ; (tdm AG) rend la liste représentant la table des matières de AG (define (tdm AG) (listeetiqnum-arbre 1 AG)) Connaissant un numéro dans la table des matières, comment obtenir le contenu de l étiquette correspondant? Le numéro est donné sous la forme d une liste : (1 1 2 2) On doit parcourir cette liste et se déplacer dans l arbre général en même temps Table des matières Algorithme de recherche d un noeud dans un AG Algorithme Étant donnés la position L et AG recherche dans AG : si L est vide : on rend faux sinon, si sa première valeur n est pas 1 : on rend faux sinon, si L ne contient qu une valeur : on rend l etiquette de AG sinon : il faut chercher dans la foret avec la position dénotée par le (cdr L) qui est non vide recherche dans une forêt avec une position L non vide si F n est pas vide si le premier numéro dans L vaut 1 alors on doit aller chercher dans le premier arbre de la forêt avec la position L sinon, il faut décrémenter le premier numéro de L et aller chercher dans les autres arbres de la forêt avec cette nouvelle position si F est vide : on rend faux

Recherche d un noeud à une position donnée Recherche dans une forêt ; ; ; rechercheforet : Liste[Nat] * Foret[alpha] -> alpha + #f ; ; ; (rechercheforet L F) rend l étiquette du noeud en position ; ; ; donnée par L, ou faux si cette position n existe pas ; ; ; HYPOTHESE : L est non vide Recherche dans un arbre ; ; ; recherchearbre : Liste[Nat] * ArbreGeneral[alpha] -> alpha + #f ; ; ; (recherchearbre L AG) rend l étiquette du noeud en position ; ; ; donnée par L, ou faux si cette position n existe pas Recherche d un noeud à une position donnée Recherche dans un arbre ; ; ; recherchearbre : Liste[Nat] * ArbreGeneral[alpha] -> alpha + #f (define (recherchearbre L AG) (cond ((not (pair? L)) #f) ((not (= (car L) 1)) #f) ((not (pair? (cdr L))) (ag-etiquette AG)) (else (rechercheforet (cdr L) (ag-foret AG))))) Recherche dans une forêt ; ; ; rechercheforet : Liste[Nat] * Foret[alpha] -> alpha + #f ; ; ; HYPOTHESE : Liste non vide (define (rechercheforet L F) (if (= (car L) 1) (recherchearbre L (car F)) (rechercheforet (cons (- (car L) 1) (cdr L)) (cdr F))) #f)) Exemple de recherches Affichage en HTML

Structure de base d un document HTML Type d un document HTML Un document commence toujours par préciser son type. Exemple <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN > <html> <head> <title>table des matières</title> </head> <body> contenu de la page </body> </html> Mise en forme du texte en HTML Règles d écriture en HTML Les balises définissent les règles d affichage du texte à afficher par le navigateur. Mise du texte en gras : b Mise du texte en italique : i Souligner le texte : u Faire clignoter le texte : blink Augmenter la taille du texte (titre) : h1 à h6 Passer à la ligne : br etc. les balises encadrent le texte qu elles régissent : ouverture d une balise : <nom-de-la-balise> fermeture d une balise : </nom-de-la-balise> Les balises peuvent s imbriquer mais ne doivent pas se chevaucher modèle du parenthésage

D autres balises Série numérotée en HTML (source) On peut définir des puces à afficher les unes à la suite des autres La balise li permet de délimiter un élément d une série La balise ul définit une série non numérotée d éléments La balise ol définit une série numérotée d éléments Série numérotée en HTML (affichage) Entête et fin d une page HTML Entête d une page HTML ; ; ; headerhtml : ->String ; ; ; (headerhtml) rend l entete obligatoire de tout fichier HTML (define (headerhtml) (string-append <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN > <html> <head> <meta http-equiv= Content-Type content= text/html ;charset=iso-8859-1 > <title>table des matières</title> </head> <body> ))

Entête et fin d une page HTML Fonction de création du HTML Fin d une page HTML ; ; ; bottomhtml : ->String ; ; ; (bottomhtml) rend la terminaison obligatoire de tout fichier HTML (define (bottomhtml) (string-append </body> </html> )) Création HTML ; ; ; ag2html : ArbreGeneral[String] -> String ; ; ; (ag2html AG) rend la chaine contenant le code HTML complet ; ; ; permettant d afficher AG dans une page web. (define (ag2html AG) (string-append (headerhtml) <ul> (ag2puceshtml AG) </ul> (bottomhtml))) Fonction de création du HTML Fonction de création du HTML Création HTML à partir d un arbre ; ; ; ag2puceshtml : ArbreGeneral[String] -> String ; ; ; (ag2html AG) rend la chaine de caractères qui correspond à ; ; ; la mise en puces HTML de l arbre AG (define (ag2puceshtml AG) (if (ag-feuille? AG) (string-append <li> (ag-etiquette AG) </li> ) (string-append <li> (ag-etiquette AG) <ul> (foret2puceshtml (ag-foret AG)) </ul> </li> ))) Création HTML à partir d une forêt ; ; ; foret2puceshtml : Foret[String] -> String ; ; ; (foret2puceshtml F) rend la chaine de caractères qui correspond à ; ; ; la mise en puces HTML de la forêt F (define (foret2puceshtml F) (string-append (ag2puceshtml (car F)) (foret2puceshtml (cdr F))) ))

Chaine contenant le code HTML Affichage en HTML