( n) !n! 0. Compter les arbres binaires (1) Application des arbres binaires. Plan



Documents pareils
Arbres binaires de recherche

Les structures de données. Rajae El Ouazzani

Les arbres binaires de recherche

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

ARBRES BINAIRES DE RECHERCHE

Objets et Programmation. origine des langages orientés-objet

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

TD3: tableaux avancées, première classe et chaînes

chapitre 4 Nombres de Catalan

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Algorithmique, Structures de données et langage C

INF601 : Algorithme et Structure de données

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

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

Quelques Algorithmes simples

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Algorithmes d'apprentissage

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

2. Comprendre les définitions de classes

Programmation avec des objets : Cours 7. Menu du jour

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

Programmation Orientée Objet

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Les algorithmes de base du graphisme

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmer en JAVA. par Tama

Corrigé des exercices sur les références

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Un ordonnanceur stupide

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Programmation par les Objets en Java

Projet de programmation (IK3) : TP n 1 Correction

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle CISII,

Recherche dans un tableau

Synthèse d'images I. Venceslas BIRI IGM Université de Marne La

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

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

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

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

TD/TP PAC - Programmation n 3

Introduction au maillage pour le calcul scientifique

Image d un intervalle par une fonction continue

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

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

MIS 102 Initiation à l Informatique

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Algorithmes récursifs

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

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Package Java.util Classe générique

Chap 8 - TEMPS & RELATIVITE RESTREINTE

STAGE IREM 0- Premiers pas en Python

I. Introduction aux fonctions : les fonctions standards

Géométrie Algorithmique Plan du cours

Introduction à MATLAB R

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

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Auto-évaluation Programmation en Java

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

CH.6 Propriétés des langages non contextuels

Domain Name Service (DNS)

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

Introduction aux algorithmes répartis

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

données en connaissance et en actions?

Plateforme PAYZEN. Définition de Web-services

Java Licence Professionnelle CISII,

Programmation en Java IUT GEII (MC-II1) 1

Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 17/04/2007

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

Chapitre VI- La validation de la composition.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

ACTIVITÉ DE PROGRAMMATION

Cours 1: Java et les objets

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

1 Recherche en table par balayage

Corrigés des premiers exercices sur les classes

COUCHE 7/OSI : TRANSFERT DE FICHIERS FTAM

Résolution d équations non linéaires

Programmation Objet I

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Pourquoi l apprentissage?

NOEUD HERRINGBONE-PINEAPPLE STANDARD TYPE and PASS

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

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

TP : Gestion d une image au format PGM

Chapitre 7. Récurrences

Algorithmes de recherche

TD/TP PAC - Programmation n 3

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

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

Transcription:

pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles ompter les arbres binaires (1) Rappel : un arbre binaire est soit vide, soit union disjointe d'une racine, d'un sous-arbre gauche et d'un sous-arbre droit. Si b n est le nombre d'arbres binaires distincts à n nœuds, on a donc : La série (x) = n-1! b 0 = 1 b n = b i b n-i-1!n! 0 b n x n i = 0 vérifie l'identité x 2 (x) - (x) + 1 = 0 mphi 8 1 mphi 8 2 La résolution de l'équation x 2 (x) - (x) + 1 = 0 donne b n = = d'où b n ~ " -1/2 4 n n -3/2 + O(4 n n -5/2 ) ompter les arbres binaires (2) 1 n+1 2n ( n) (2n)! n!(n+1)! (1) ans un arbre, nombre de nœuds = 1 + nombre d'arcs (2) ans un arbre binaire complet (tout nœud est d'arité 0 ou 2), nombre de feuilles = 1 + nombre de nœuds internes mphi 8 3 pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles mphi 8 4

Une image est : soit de couleur uniforme Une vision hiérarchique des images Tétrarbres (quad trees) Une image 2 n x 2 n est subdivisée itérativement en quadrants jusqu'au niveau du pixel. NO NE soit formée de quatre images NO NE SO SE SO NO NE SE SO SE mphi 8 5 mphi 8 6 Tétrarbre associé à une image Une échelle de 32 couleurs mphi 8 7 mphi 8 8

Tétrarbre associé à une image Tétrabres en Java (1) class Tetrarbre boolean couleur; // version noir et blanc boolean estfeuille; Tetrarbre so, no, ne, se; // onstructeur des feuilles Tetrarbre(boolean couleur) this.estfeuille = true; this.couleur = couleur;... Merci à Luc Maranget... mphi 8 mphi 8 9 Tétrarbres en Java (2)... // onstructeur des nœuds internes Tetrarbre(Tetrarbre so, Tetrarbre no, Tetrarbre ne, Tetrarbre se) this.estfeuille = false; this.so = so; this.no = no; this.ne = ne; this.se = se; static boolean[][] image; // pixels Tétrarbres en Java (3) static boolean estmonochrome( Tetrarbre so, Tetrarbre no, Tetrarbre ne, Tetrarbre se) return (so.estfeuille && no.estfeuille && ne.estfeuille && se.estfeuille && so.couleur == no.couleur && so.couleur == ne.couleur && so.couleur == se.couleur); mphi 8 11 mphi 8 12

t = taille/2 Tétrarbres en Java (4) pixel (i, j) i i + t j NO SO j + t NE SE static Tetrarbre fairerbre(int taille, int i, int j) if (taille == 1) return new Tetrarbre(image[i][j]); int t = taille/2; Tetrarbre so = fairerbre(t, i+t, j); Tetrarbre no = fairerbre(t, i, j); Tetrarbre ne = fairerbre(t, i, j+t); Tetrarbre se = fairerbre(t, i+t, j+t); if (estmonochrome(so, no, ne, se)) return new Tetrarbre(so.couleur); return new Tetrarbre(so, no, ne, se); mphi 8 13 mphi 8 14 odage Tétrabres en Java (5) On code l'arbre par un parcours préfixe. Les nœuds internes sont codés 0 et les feuilles 1. près chaque 1, on code la couleur de la feuille (0 pour blanc, 1 pour bleu). Equivaut au code : 0 11 On pourrait améliorer le code : 01111011110111110110111111 00 01 1 mphi 8 15 static void parcours(tetrarbre a) if (a!= null) if (a.estfeuille) System.out.print("1" + ((a.couleur)? "1" : "0")); else // nœud interne System.out.print("0"); parcours(a.so); parcours(a.no); parcours(a.ne); parcours(a.se); mphi 8 16

utre avantage des tétrarbres On peut changer facilement la couleur d'une image. Faire une rotation d'un quart de tour. NO SO NE SE NE NO SE SO pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles SO NO NE SE NO NE SE SO mphi 8 17 mphi 8 18 Problème des n corps Objectif : simuler le comportement de n particules (force de gravité ou électrostatique). Solution directe, itérer les calculs suivants : les n(n-1) forces F(p, q) entre 2 particules p et q, la résultante des forces pour chaque particule, le mouvement résultant pour une unité de temps. Trop lent pour n grand. alcul hiérarchique calculs exacts pour des particules proches; on assimile les particules distantes à leur barycentre. mphi 8 19 lgorithme de arnes-hut Octabres: c'est la version 3 des tétrarbres : un cube est divisé récursivement en 8 cubes. alcul de la force F(p, ), sur la particule p, issue du cube de coté c et de barycentre b. Si ne contient qu'une particule q, F(p, ) = F(p, q) Si la distance de p à b est > #.c (par ex. # = 2 ou 3), F(p, ) = F(p, b) Sinon F(p, ) = résultante (F(p, 1 ),..., F(p, 8 )) où 1,..., 8 sont les 8 sous-cubes de. Hierarchical O(n log n) force calculation algorithm, J. arnes and P. Hut, Nature, v. 324, écembre 1986 mphi 8

2 1 3 4 5 6 7 8 9 11 12 1 Tétrarbre associé 1 2 3 4 2 4 1 3 4 3 4 2 3 8 12 1 3 1 4 2 4 4 5 6 7 9 2 4 11 Réalisation onnées : pour chaque cube, la masse totale et le barycentre. e calcul peut se faire récursivement. Gestion de l'octarbre L'arbre est reconstruit à chaque unité de temps. as le pire en O(n 2 ). En pratique, arbre de hauteur O(log n). Pour une distribution uniforme en 3, le nombre d'interactions à calculer est ~ 28"# 3 (n log 2 n) soit ~ 263(n log 2 n) pour # = 3 9 mphi 8 22 Résultats expérimentaux Simulation d'un système de 5000 particules : fois plus rapide qu'avec l'algorithme direct. L'algorithme est facilement parallélisable. La simulation réaliste d'une galaxie nécessite des millions d'étoiles. On connaît un algorithme en O(n). En 1994, on a simulé 7 particules pour 3 pas de calcul (une semaine de calcul sur 500 processeurs...) pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles mphi 8 mphi 8 24

Recherche en une dimension Exemple Problème : ompter les éléments d un ensemble d entiers qui sont dans un intervalle donné [min, max]. Exemple : E = 7, 9,, 12, 15, Entre 12 et 19, il y a 2 éléments. L ensemble est donné par un arbre binaire de recherche. Le prétraitement se fait en O(n log n), la recherche se fait en temps O(r + log n) où r est le nombre d'éléments trouvés. 7 3 9 15 6 12 5 25 Entre 8 et 19, il y a 4 éléments. On peut couper les sous-arbres issus de 3 (à gauche de 7) et de 25 (à droite de ). mphi 8 25 mphi 8 26 Exemple plus compliqué En Java Entre 25 et 75 50 7 90 40 80 60 55 70 65 79 72 mphi 8 27 static int compter(rbre a, int min, int max) int total = 0; if (a == null) return total; if (a.contenu >= min) total += compter(a.filsg, min, max); if (a.contenu >= min && a.contenu <= max) total++; if (a.contenu <= max) total += compter(a.fils, min, max); return total; mphi 8 28

pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles Recherche en deux dimensions Problème : Etant donné un ensemble de points dans le plan, déterminer ceux qui sont dans une zone donnée. Exemples : Trouver les villes à moins de 0 km de Tours Trouver les personnes entre 25 et 29 ans qui gagnent entre 00 et 00 euros par mois. mphi 8 29 mphi 8 J G F H E L K Recherche en deux dimensions I Problème : Nombre de points dans un rectangle donné. Solution en deux étapes 1. Prétraitement : un arbre pour le nuage de points 2. Réponse : une recherche dans l arbre mphi 8 31 rbres pour des points class Point // onflit avec MacLib! int x, y; Point(int a, int b) x = a; y = b; class rbre Point p; rbre filsg, fils; rbre(rbre g, Point v, rbre d) filsg = g; p = v; fils = d; mphi 8 32

rbre pour un nuage de points Exemple onstruire un arbre comme suit le premier point coupe le plan en deux, horizontalement. les points coupent des secteurs horizontalement aux niveaux pairs, et verticalement aux niveaux impairs. J G F H E L K I mphi 8 33 mphi 8 34 Exemple Exemple J G F H E L K I J G F H E L K I est fils gauche de car.y <.y est fils gauche de car.x <.x mphi 8 35 mphi 8 36

Exemple Exemple J G F H E L K I J G F H E L K I E est fils droit de car.x >.x mphi 8 37 E est fils droit de car E.y >.y est fils droit de car.x >.x mphi 8 38 la racine, le niveau est impair Insérer un point : au début static rbre ajouter(point p, rbre a) return ajouter(p, a, false); static rbre ajouter(point p, rbre a, boolean vertical)... mphi 8 39 Insérer un point : une étape static rbre ajouter(point p, rbre a, boolean vertical) if (a == null) return new rbre(null, p, null); boolean estgauche = (vertical)? (p.x < a.p.x) : (p.y < a.p.y); if (estgauche) // insérer à gauche return new rbre(ajouter(p, a.filsg,!vertical), a.p, a.fils); else // insérer à droite return new rbre(a.filsg, a.p, ajouter(p, a.fils,!vertical)); mphi 8 40

class Rectangle int g, d, b, h; g h b d La classe Rectangle g : abcisse du côté gauche d : abcisse du côté droit b : ordonnée du côté bas h : ordonnée du côté haut mphi 8 41 Le décompte (1) static int compter(rectangle r, rbre a, boolean vertical) if (a == null) return 0; int total = 0; boolean agauche = r.g <= a.p.x; boolean aroite = a.p.x < r.d; boolean enas = r.b <= a.p.y; boolean enhaut = a.p.y < r.h; boolean min, max; min = (vertical)? agauche : enas; max = (vertical)? aroite : enhaut;... // à suivre mphi 8 42 Le décompte (2) static int compter(rectangle r, rbre a, boolean vertical)... // suite if (min) total += compter(r, a.filsg,!vertical); if (agauche && aroite && enas && enhaut) total++; if (max) total += compter(r, a.fils,!vertical); return total; pplication des arbres binaires. Plan ompter les arbres binaires Tétrarbres (quad trees) Problème des n corps Recherche dans un intervalle Recherche dans un nuage de points Recherche dans un arbre d intervalles mphi 8 43 mphi 8 44

Recherche d'un intervalle coupant Problème : hercher, dans un ensemble d intervalles, un élément qui rencontre un intervalle donné. Exemple : ans une base d événements, chercher un événement qui a eu lieu durant une période donnée. Type abstrait de données onnées : Un ensemble d'intervalles fermés [g, d]. Opérations : ajouter un intervalle supprimer un intervalle chercher si l'ensemble contient un intervalle qui rencontre un intervalle donné v. mphi 8 45 mphi 8 46 Structure de données Exemple Les intervalles sont stockés dans un arbre binaire de recherche. La clé utilisée pour comparer les nœuds est l'extrémité gauche des intervalles. dmax = max des extrémités droites du sous-arbre. 8:9 16:21 [22,25] rencontre [11,14] non 25: haque noeud n contient une information supplémentaire, dmax, qui est le maximum des extrémités droites des intervalles du sous-arbre issu de n. 5:8 0:3 6: 3 15: 17:19 19: 26:26 26 mphi 8 47 mphi 8 48

Utilisation de dmax (1) Intervalle [g, d]. Règle 1 dmax = max des extrémités droites du sous-arbre. 8:9 16:21 étermine dans quel sous-arbre chercher. 25: Si filsg.dmax < g, inutile de chercher dans le sous-arbre gauche. 8:9 16:21 Intervalle [22, 25] 25: 5:8 15: 17:19 26:26 26 5:8 15: 17:19 26:26 26 0:3 6: 3 19: 0:3 6: 3 dmax = < 22 19: mphi 8 49 mphi 8 50 Règle 2 (justifiée plus loin) Utilisation de dmax Si filsg.dmax! g, inutile de chercher dans le sous-arbre droit. 8:9 16:21 Intervalle [g, d]=[22, 25] 25: dmax = > 11 dmax = < 11 pas d'intersection! 8:9 16:21 Intervalle [11, 14] 25: 5:8 15: 17:19 26:26 26 5:8 15: 17:19 26:26 26 0:3 6: 3 dmax = > 22 dmax = < 22 Intersection! 19: mphi 8 51 0:3 6: 3 19: mphi 8 52

Justification Les classes Soit v = [g, d]. Soit [g', d'] un intervalle du sous-arbre gauche d'extrémité droite maximale. Par hypothèse, on a d'! g. Supposons qu aucun intervalle du sous-arbre gauche ne rencontre [g, d]. lors [g, d] $ [g', d'] = %, d'où d < g'. Soit [g", d"] un intervalle du sous-arbre droit. On a g < d < g' < g" < d", donc [g, d] et [g", d"] sont disjoints. onc aucun intervalle ne rencontre v! Une classe d'intervalles Une classe d'arbres binaires de recherche avec un champ intervalle un champ dmax Il faut revoir le constructeur d'arbres pour le calcul de dmax! mphi 8 53 mphi 8 54 class Intervalle int min, max; Intervalle(int a, int b) min = a; max = b; lasse Intervalle static boolean rencontre( Intervalle u, Intervalle v) return u.min <= v.max && v.min <= u.max; mphi 8 55 class rbre Intervalle u; int dmax; rbre filsg, fils; lasse rbre rbre(intervalle v, rbre g, rbre d) u = v; filsg = g; fils = d; dmax = calculmax(v, g, d);... mphi 8 56

lasse rbre class rbre... static int calculmax(intervalle v, rbre g, rbre d) int m = v.max; if (g!= null && g.dmax > m) m = g.dmax; if (d!= null && d.dmax > m) m = d.dmax; return m; mphi 8 57 Recherche static rbre chercher(intervalle v, rbre a) if (a == null rencontre(v, a.u)) return a; if (a.filsg!= null) && a.filsg.dmax >= v.min) return chercher(v, a.filsg);//règle 2 else return chercher(v, a.fils);//règle 1 mphi 8 58