• Aucun résultat trouvé

L’extension pst-tree est nécessaire.

Les arbres n’ont pas besoin d’être insérés dans un environnementpicture.

13.2.1 Arbres non pondérés

Pour construire un arbre reliant une racine donnée aux feuillesf1,f2, etc., on utilise la commande

\pstree[opt]{racine}{f1}{f2}{...}}

(7). Les fantômes sont détaillés page 55.

Pour indiquer la direction dans laquelle l’arbre doit grandir, on utilise la commande treemode=dir où dir a pour valeur L (gauche), R (droite), U (haut) ou D (bas)(8) .

La distance horizontale entre deux nœuds voisins(9) est modifiée avec treesep=val. Si l’on ne tient pas compte des largeurs des légendes des nœuds, cette distance(10) est modifiée avec treenodesize=val. La distance verticale entre une racine/nœud et ses feuilles(11) est modifiée avec levelsep=val.

L’espace entre une racine et l’extrémité du segment qui la lie à la feuille estnodesep=val.

b

A B C

A B

\psset{nodesep=0pt,levelsep=1cm}

\pstree{\Tp}

{\TC* \TC}

\psset{treemode=R,nodesep=0pt,levelsep=1cm}

\pstree{\Tp}

{\Tc*{1mm}\Tc{1.5mm}}

\psset{treemode=D,nodesep=0pt,levelsep=1cm}

\pstree{\Tdot}

{\TR{A} \TR{B} \TR{C}}

\psset{nodesep=0pt,levelsep=1cm}

\pstree{\Tr{\psframebox{$\Omega$}}}

{\Tcircle{$A$} \Tcircle{$B$}}

La commande \Tp place un espace vide au nœud vide. La commande\Tdot place un petit point.

Quand, à une feuille, il y a de nouveau un arbre, on utilise la commande\pstreede façon récursive(12) .

\psset{treemode=R,levelsep=2cm}

\pstree{\Tp}{%

\TC*

\pstree{\TC}{%

\TC* \TC

(8). PourLeft,Right,Up etDown.

(9). 0,75 cm par défaut.

(10). −1pt par défaut.

(11). 2 cm par défaut.

(12). Une petite organisation des données s’impose alors !

CHAPITRE 13. GRAPHES ET ARBRES PONDÉRÉS }

}

Voici comment on pourrait construire un arbre lié au calcul de3x+ 1(13) :

+ 1

× 3

x

\psset{treemode=L,levelsep=2cm}

\pstree{\Tcircle{$+$}}

{\Tcircle{$1$}

\pstree{\Tcircle{$\times$}}

{\Tcircle{$3$}\Tcircle{$x$}} } A

B

D E F

C

G H

D

I

\psset{treemode=D}

\pstree{\Tcircle{A}}

{\pstree{\Tcircle{B}}

{\Tcircle{D} \Tcircle{E} \Tcircle{F}}

\pstree{\Tcircle{C}}

{\Tcircle{G} \Tcircle{H}}

\pstree{\Tcircle{D}}

{\Tcircle{I}}}

13.2.2 Avec une \newcommand

On peut aussi utiliser une \newcommand pour définir un type de nœud qui servira plusieurs fois et dont on voudrait soit éviter de saisir à chaque fois la ligne complète de saisie soit pouvoir changer facilement l’un des paramètres « à la base » sans avoir à changer chaque ligne dans chaque apparition.

On définit ainsi, par exemple, deux nœuds, « jaune » (J) et « vert » (V), de la façon suivante :

\newcommand{\J}{\Tcircle[fillstyle=solid,%

fillcolor=yellow,linecolor=red]{ }}

\newcommand{\V}{\Tcircle[fillstyle=solid,%

fillcolor=green,linecolor=blue]{ }}

L’arbre ci-dessous précède ses lignes de code.

(13). Ceci est à rapprocher de la notation en polonaise inverse 3 x mul 1 add.

\psset{treemode=R}

\pstree{\Tp}{\J \pstree{\V}{\J \V} } Voici un autre exemple(14) :

\pstree[treemode=R]{\C{A}}

{\K{B}

\pstree{\C{C}}

{\K{D} \N{E}}

}

A

B C

D

E 13.2.3 Arbres pondérés

Pour placer un {poids} sur une branche, on ajoute après la définition du nœud l’instruction ^{poids} ou _{poids} selon que l’on veuille placer celui-ci au-dessus ou en-dessous de la branche.

0,1 S

0,99 P 0,01 P

0,9 S

0,98 P 0,02 P

\pstree[treemode=R,nodesep=5pt,%

levelsep=2.5cm]{\Tp}{%

\pstree{\TR{$S$}^{0,1}}{%

\TR{$P$}^{0,99}

\TR{$\overline{P}$}_{0,01}}

\pstree{\TR{$\overline{S}$}_{0,9}}{%

\TR{$P$}^{0,98}

\TR{$\overline{P}$}_{0,02}}}

Par défaut, le texte est écrit horizontalement. Tout comme dans un graphe, on peut utiliser les com-mandesnrot=:U et\naputpour écrire parallèlement au segment reliant deux nœuds.

(14). Les lettres K, C et S correspondent respectivement à un habillage avec un carré, un habillage avec un cercle et un habillage nul.

0,1 S Le texte « Epr. 1 » est en fait la légende d’une feuille d’un arbre (dirigé vers le bas) à une branche et le texte

« Epr. 2 », celle d’une feuille de l’arbre à une branche de racine la feuille précédente. Ces branches ne sont pas dessinées, comme le demande l’optionedge=none.

\pstree[treemode=D,edge=none,%

levelsep=2cm]{\Tp}{%

\pstree{\TR{Epr. 1}}{\TR{Epr. 2}}}

Dans le même ordre d’idée, les probabilitésp2,p q et q2 sont des feuilles d’arbres à une branche, de lon-gueur 1 cm.

L’arbre portant les deux textes et l’arbre probabilisé sont espacés d’un \qquad, le tout est placé dans un environnement\center.

On peut utiliser un arbre pour calculer une probabi-lité :

CHAPITRE 13. GRAPHES ET ARBRES PONDÉRÉS

\ncbar{noeud1}{noeud2}\ncput*{$\oplus$}

\naput[nrot=0]{$P(B)=0{,}981$}

Première remarque. Les arbres peuvent être dessinés avec l’extension \pstricks seule où à l’aide de l’extension pst-node.

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5

Epr. 2

Epr. 1 S S

S p

S p q

S p q

S q2

p q

p q p q

\psset{unit=0.9cm}

\begin{pspicture}(0,0)(8,5)

\psgrid[subgriddiv=0,gridcolor=lightgray,%

gridlabelcolor=lightgray](0,0)(8,5)

\rput(0.5,1){\Rnode{E2}{Epr. 2}}

\rput(0.5,3){\Rnode{E1}{Epr. 1}}

\rput(5,5){\Rnode{A}{\Tp}}

\cnodeput(3,3){B}{$S$}

\cnodeput(7,3){C}{$\overline{S}$}

\cnodeput(2,1){D}{$S$}

\rput(2,0){\Rnode{p1}{$p$}}

\cnodeput(4,1){E}{$\overline{S}$}

\rput(4,0){\Rnode{p2}{$p\,q$}}

\cnodeput(6,1){F}{$S$}

\rput(6,0){\Rnode{p3}{$p\,q$}}

\cnodeput(8,1){G}{$\overline{S}$}

\rput(8,0){\Rnode{p4}{$q^2$}}

\ncline{A}{B}\ncput*{$p$}

\ncline{A}{C}\ncput*{$q$}

\ncline{B}{D}\ncput*{$p$}

\ncline{B}{E}\ncput*{$q$}

\ncline{C}{F}\ncput*{$p$}

\ncline{C}{G}\ncput*{$q$}

\end{pspicture}

Seconde remarque.Le logicielPstplus[71] pourra être d’une grande utilité dans la création d’arbres ! Il de-mande seulement à l’utilisateur de cliquer sur les bou-tons Ajouter Branche et Ajouter Sous Branche puis de nommer les nœuds correspondants, affectés de leur poids. Puis il fait lui-même tout le travail de structuration !

Chapitre 14

Algorithmes

Remarque.Il s’agit ici de voir comment écrire un algo-rithme qui sera adapté au langage de programmation utilisé en classe (Python, Scratch, Algobox, . . .). En particulier, ces lignes verront apparaître une instruc-tion comme «a prend pour valeur 0 » mais pas une telle que «a:= 0 » ou «a←0».

14.1 Deux premières idées de pré-sentation

Pour présenter un algorithme, on peut être amené à le présenter avec un tableau (voyez par exemple celui ci-dessous qui est l’algorithme de la multiplication russe, page 73) – et dont le code source ne montre aucunement une présence d’algorithme – ou par un organigramme (celui ci-dessous représente la « suite de Syracuse ») :

saisirles entiers aetb m prend la valeur0 tant queb6= 0faire

sib est impairalors

m prend la valeurm+a aprend la valeur2×a

b prend la valeurE(b/2) affiche m

Choisir un entier naturel

Entier pair ?

Diviser par 2 Multiplier par 3 puis ajouter 1

oui non