A.LEGRAND
Y.ROBERT
Novembre 3, 2005
En effet, dans le cas général, il n'est pas facile de construire un arbre d'évaluation équilibré pour une expression arithmétique. Regardons par exemple l'évaluation d'un polynôme par le schéma de Horner: Les arbres naturels correspondant au schéma de Horner et à la forme développée sont présentés dans la figure 1.
L'évaluation avec la forme développée conduit à un arbre mieux équilibré mais elle introduit des calculs redondants et ne permet donc pas une évaluation beaucoup plus rapide. Dans la figure 2, nous présentons brièvement le schéma d'évaluation que nous allons utiliser. L'idée est d'associer à chaque nud (i.e. chaque opérateur) de l'arbre une fonction et d'utiliser une forme de saut de pointeur (afin d'obtenir le temps en ) pour évaluer l'expression.
On considère maintenant une chaîne constituée uniquement de
parenthèses (de longueur avec ) obtenue par la
suppression dans une expression simple de tous les autres caractères.
On va montrer comment calculer la fonction match sur cette séquence de
parenthèses.
On est maintenant en mesure de proposer un algorithme pour construire
l'arbre d'évaluation d'une formule simple. On rappelle que l'arbre
d'évaluation correspondant à la formule simple
Nous avons donc montré qu'il est possible de construire l'arbre d'évaluation d'une expression quelconque correctement parenthésée de longueur en temps avec processeurs.
Dans les questions suivantes, nous allons montrer comment évaluer l'expression en temps avec processeurs. Il est possible de réaliser cette évaluation en temps avec processeurs mais cela sort du cadre de ce devoir.
Le principe de l'évaluation est le suivant. À chaque nud de l'arbre d'évaluation, on va associer un nud . Au départ, pour tout nud on pose . Un nud est dit marqué si on sait évaluer la valeur de l'expression du sous arbre enraciné en ce nud. Dès qu'un des fils d'un nud est marqué, on dit que le nud est actif. À tout moment, si un nud est actif, la connaissance de la valeur de doit être suffisante au calcul de la valeur de . Pour cela, on associe à chaque nud actif une fonction de la forme , où représente la valeur de . Pour obtenir une évaluation rapide de l'expression, l'idée est de faire du saut de pointeur sur , ce qui nécessite de composer les fonctions associées au nud.
On définit une étape de l'algorithme d'évaluation de la fonction par la séquence (Marquer,Activer,Sauter,Sauter). Dans la suite, on va montrer qu'après étapes, tous les nuds de l'arbre d'évaluation sont marqués, et donc en particulier que la racine contient la valeur de l'expression. On aura donc ainsi produit un algorithme qui évalue une expression quelconque en temps avec processeurs, puisque chaque étape est atomique avec processeurs.
Pour démontrer la correction de l'algorithme, on a utiliser les deux
invariants suivants
Réponses aux exercices