Cours sur les arbres : Deux exemples d arbres
12 pages
Français

Cours sur les arbres : Deux exemples d'arbres

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
12 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

-1- -2-INF 421 — 06 Luc Maranget Deux exemples d’arbres◮ Les arbres-termes :Le calcul propositionnel.Deux usages des arbres◮ Les arbres structurants :Diviser le plan en quatre (et puis enquatre, et puis...)Luc.Maranget@inria.frhttp://www.enseignement.polytechnique.fr/profs/informatique/Luc.Maranget/421/-3- -4-Un grand classique La classe des propositionsSelon le principe d’un champ (( nature ).Une expression bool´eenne e (ou proposition) est :class Prop {◮ Vrai ou faux, T ou F,final static int FALSE=0, TRUE=1, VAR=2, NOT=3, OR=4, AND=5 ;int nature ; int asVar ; Prop left, right ;◮ Une variable x ,...x ,0 N−1private Prop (int nature) { this.nature = nature ; }◮ La n´egation ¬(e),◮ Une conjonction (e ∧e ), une disjonction (e ∨e ).1 2 1 2private Prop (int nature, int asVar) {this.nature = nature ; this.asVar = asVar ;Note :}◮ Conceptuellement c’est aussi simple que les expressionsprivate Prop (int nature, Prop left) {arithm´etiques.this.nature = nature ; this.left = left ;}◮ Techniquement, il y a un peu plus de sortes de termes.private Prop (int nature, Prop left, Prop right) {this.nature = nature ; this.left = left ; this.right = right ;}}-5- -6-Construction des termes BonusIl devient hasardeux de se fier aux constructeurs. Des d´etails, li´es a` Une certaine d´econnexion entrela r´ealisation concr`ete prennent trop d’importance.◮ Sp´ecification, (ce que c’est, ici une proposition)On utilisera plutotˆ des m´ethodes statiques bien ...

Sujets

Informations

Publié par
Nombre de lectures 153
Langue Français

Extrait

1
3
INF 421 — 06
Deux
usages
des
Luc Maranget
arbres
Luc.Maranget@inria.fr http://www.enseignement.polytechnique.fr/profs/ informatique/Luc.Maranget/421/
Un grand classique Uneexpressionbool´eennee(ou proposition) est :
Vrai ou faux,TouF,
Une variablex0, . . . xN1, o´intgaeanL¬(e),
Une conjonction (e1e2), une disjonction (e1e2). Note:
Conceptuellement c’est aussi simple que les expressions arithm´etiques.
Techniquement, il y a un peu plus de sortes de termes.
2
4
Deuxexemplesdarbres
rbratseseLmeers: Le calcul propositionnel.
Les arbres structurants: Diviser le plan en quatre (et puis en quatre, et puis. . . )
La classe des propositions Selon le principe d’un champnature. classProp{ fin a l static intFALSE=0,TRUE=1,VAR=2,NOT=3,OR=4,AND=5 ; intnature;intasVar;Prop left,right;
privateProp(intnature) {this.nature=nature; }
privateProp(intnature,intasVar) { this.nature=nature;this.asVar=asVar; }
privateProp(intnature,Prop left) { this.nature=nature;this.left=left; }
privateProp(intnature,Prop left,Prop right) { this.nature=nature;this.left=left;this.right=right; }}
5
7
Construction des termes Ildevienthasardeuxdeseerauxconstructeurs.Desde´tails,li´es`a lare´alisationconcr`eteprennenttropdimportance. Onutiliseraplutˆotdesme´thodesstatiquesbiennomme´es. staticProp mkTrue() {return newProp(TRUE) ; }
staticProp mkVar(intno) {return newProp(VAR,no) ; }
staticProp mkNot(Prop e) {return newProp(NOT,e) ; }
staticProp mkAnd(Prop return newProp(AND, } . . .
e1,Prop e2) { e1,e2) ;
C’est la technique ditefactory.
Affichage Commedhabitude,red´enirtoString. publicString toString() { switch(nature) { caseTRUE:return"true"; caseFALSE:return"false"; caseVAR:return"x"+asVar; caseNOT:return"!("+left+")"; caseOR:return"("+left+" || "+right+")"; caseAND:return"("+left+" && "+right+")"; default:throw newError("Prop (toString)") ; } }
B´ene´ce:System.out.println(e)fonctionne. Parcours ? Infixe en quelque sorte.
6
8
Bonus Unecertainede´connexionentre
)ontisiporoepnuici,tseceuqecon,(catieciSp´
Impelicmahcstfait,immentcetaoi(noclpe´emtnnatureetc.)
On peut d’alleurs exprimer d’autres connecteurs logiques, sans changer les cellules d’arbre, par ex. staticProp mkImplies(Prop e1,Prop e2) { returnmkOr(mkNot(e1),e2) ; }
Fonctionnement
x0
x1
x2
toString()du sousarbre de gauche : Deux feuilles"x0"et"x1". atncCo:noitane´"("+"x0"+" || "+"x1"+")". Soit au final pour ce sousarbre"(x0 || x1)".
toString()du sousarbre de droite :"x2".
Et finalement :"("+"(x0 || x1)"+" || "+"x2"+")"
9
11
CoˆutdetoString() Conside´rerlasuitedexpressions
E0=x0,
Ek+1=xk+1Ek
L’arbreEkrepelbmessa`toˆtul.lenuetsi
xkxk1
. . .
x1
L’arbreEkde2epso`sk+ 1 nœuds.
x0
Ek.toString()tniuesrpdooisnatent´taonsclee,uqitardauqtse des chaˆınes de taille au moins 3 + 5 +∙ ∙ ∙+ (2k+ 1).
toStringliaernie´II . . . caseAND: r.append("(") ; left.inStringBuilder(r) ; r.append(" && ") ; right.inStringBuilder(r) ; r.append(")") ; break; } }
publicString toString() { StringBuilder r=newStringBuilder() ; inStringBuilder(r) ; returnr.toString() ; } }
10
12
toStringlin´eaireAvec leStringBuilderamtseeodth´eappend(String s), qui ajoute la chaˆınesalna`udStringBuildernuocopru,ˆut proportionnela`s.length(). private voidinStringBuilder(StringBuilder r) { switch(nature) { caseTRUE: r.append("true") ;break; caseFALSE: r.append("false") ;break; caseVAR: r.append("x"+asVar) ;break; caseNOT: r.append("!(") ; left.inStringBuilder(r) ; r.append(")") ; break; . . .
´ Evaluation des propositions Lesr`eglessontnormalementbienconnues:
e F T
¬(e) T F
e1 F F T T
e2 F T F T
(e1e2) F T T T
(e1e2) F F F T
Le´valuationsefaitrespectivement`aunenvironnement(unetable d’associations :xi7→b). Lesassociationsont´ete´vueslorsdelamphi04.Icionpeututiliser untableaudirectement(variablesindic´ees). static booleaneval(Prop e,boolean[]env) {. . .}
13
15
´ Evaluation static booleaneval(Prop e,boolean[]env) { switch(e.nature) { caseTRUE:return true; caseFALSE:return fa lse; caseVAR:returnenv[e.asVar] ; caseNOT:return!eval(e.left,env) ; caseOR: returneval(e.left,env) ||eval(e.right,env) ; caseAND: returneval(e.left,env) &&eval(e.right,env) ; default: throw newError("Prop (eval)") ; } }
Application du calcul des propositions Ladirectiondunecre`chesouhaiter´eglementerlesjouetsapport´es par les enfants. Lesjouetssontde´critsseloncinqcrite`res:petit/grand,vert/pas vert,peluche/paspeluche,´electrique/pas´electrique,avecpiles/sans piles. Cesta`dire,nousavonscinqvariablesbool´eennes. Prop petit=mkVar(0) ; Prop vert=mkVar(1) ; . . . Prop piles=mkVar(4) ;
14
16
Uncodagedynamiqueeste´galementpossible booleaneval(boolean[]env) { switch(nature) { caseTRUE:return true; caseFALSE:return fa lse; caseVAR:returnenv[asVar] ; caseNOT:return!left.eval(env) ; caseOR: returnleft.eval(env) ||right.eval(env) ; caseAND: returnleft.eval(env) &&right.eval(env) ; default: throw newError("Prop (eval)") ; } }
Statiqueoudynamique?Icicestunequestiondegoˆut,pourla suite, je choisis statique.
Lesre`glesdelacr`eche
titeiate,ellfuasspleucels.heouetLesjdepeeˆrtevtndsio Prop r1=mkOr(petit,peluche) ;
Un jouet est soit, vert, soit grand, soit les deux. Prop r2=mkOr(vert,mkNot(petit)) ;
noatccmortqieussets´elecLesjou,seleuelpirsgnpasd´e Prop r3=mkImplies(electrique,piles) ;
Il est interdit d’apporter des piles et une peluche. Prop r4=mkNot(mkAnd(piles,peluche)) ;
Touts les jouets verts sont des peluches. Prop r5=mkImplies(vert,peluche) ;
17
19
Lesre`glesdelacr`echeII Lesre`glesdelacre`chesontlaconjonctiondescinqre`gles e´le´mentaires. Prop rs=mkAnd(r1,mkAnd(r2,mkAnd(r3,mkAnd(r4,r5)))) ; Lecontrˆole`alentr´ee Oscararriveavecson(grand)traine´lectriquerougeetsespiles, peutilrentrer ? Le jouet n’est pas petit, n’est pas vert, n’est pas une peluche, este´lectrique,etilyadespiles: boolean[]oscar= {false,false,false,true,true} ;
useestinterdit(`acaeuelrtiadnOcsraieracefemiltqen´vnO delapremi`erer`egle).Lamachinelev´erieraencoreplus facilement. booleanokOscar=eval(rs,oscar) ;
De´tour:touslesenvironnementspossibles Afficher un environnement (jouet´ennac,f:elido) static voidprintln(boolean[]env) { for(inti= 0 ;i<env.length;i++) { System.out.print(env[i] ?’T’:’F’) ; // NB: expression conditionnellee1 ? e2 : e3} System.out.println() ; }
Ensuitelesachertous,donce´crireunem´ethode static voidprintAll(intn) {. . .}
n qui affiche les 2 environnements possibles.
18
20
Unequestionbienl´egitime
edjstliastuuote´es?oraisY
Existetil un environnementenv(unjouet) tel que : eval(rs,env)renvoietrue?
Cettetaˆchesed´ecomposeclairementendeux:
1. Pour chaque jouet possible,. . .
2.´evaluerlesr`egles.
n Pourquoi2? Voiciunerepre´sentationimag´eedelar´ecurrencepratiqu´ee.
Pn+1
=
T T
. T F F
. F
Pn
Pn
Soit :tiasnoiSre´mune´leustoeronirnvsesta`ennmnvariables, alorsonsait´enum´erertouslesenvironnemnts`anvariables.+ 1
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents