Structures de données et méthodes formelles Springer Paris Berlin Heidelberg New York Hong Kong Londres Milan Tokyo Marc Guyomard Structures de données et méthodes formelles Marc Guyomard Enssat Irisa Université de Rennes 1 Technopole Anticipa 6, rue de Kerampont BP 80518 22305 Lannion Cedex ISBN : 978-2-8178-0199-5 Springer Paris Berlin Heidelberg New York © Springer-Verlag France, 2011 Imprimé en France Springer-Verlag est membre du groupe Springer Science + Business Media Cet ouvrage est soumis au copyright. Tous droits réservés, notamment la reproduction et la repré- sentation, la traduction, la réimpression, l’exposé, la reproduction des illustrations et des tableaux, la transmission par voie d’enregistrement sonore ou visuel, la reproduction par microfi lm ou tout autre moyen ainsi que la conservation des banques de données. La loi française sur le copyright du 9 septembre 1965 dans la version en vigueur n’autorise une reproduction intégrale ou partielle que dans certains cas, et en principe moyennant le paiement des droits. Toute représentation, reproduc- tion, contrefaçon ou conservation dans une banque de données par quelque procédé que ce soit est sanctionnée par la loi pénale sur le copyright. L’utilisation dans cet ouvrage de désignations, dénominations commerciales, marques de fabrique, etc. même sans spécifi cation ne signifi e pas que ces termes soient libres de la législation sur les marques de fabrique et la protection des marques et qu’ils puissent être utilisés par chacun. La maison d’édition décline toute responsabilité quant à l’exactitude des indications de dosage et des modes d’emploi. Dans chaque cas il incombe à l’usager de vérifi er les informations données par comparaison à la littérature existante. Maquette de couverture : Jean-François Montmarché Illustrations de couverture : (Fotolia.com) programming layout © Mike Kiev #11376759 circuit imprimé © Sylvie Thenard #8582813 Connected shape algorithm © 1xpert #29471089 COLLECTION Télécom Directeur de la Collection : Pierre-Noël Favennec COMITÉ SCIENTIFIQUE Président : Claude Guéguen Michel Allovon (Orange Labs) Chantal Ammi (Télécom Ecole de management) Annie Blandin (Télécom Bretagne) Jean-Pierre Cocquerez (UTC Compiègne, GDR ISIS) Frédérique de Fornel (ICB Dijon, GDR Ondes) Georges Fiche (APAST Lannion) Alain Hillion (Télécom Bretagne) René Joly (Télécom ParisTech) Henri Maître (Télécom ParisTech) Chantal Morley (Télécom SudParis) Gérard Pogorel (Télécom ParisTech) Gérard Poulain (APAST Lannion) Serge Proulx (UQAM Montreal) Nicolas Puech (Télécom ParisTech) Guy Pujolle (UPMC Paris) Pierre Rolin (Télécom SudParis) Basel Solaiman (Télécom Bretagne) Sami Tabbane (SupCom Tunis) Joe Wiart (Orange Labs) À Éveline, David, Astrid et Christophe Orlane, Sirina, Émilie, Vic ... I have no objection with people feeling more comfortable with the word “English” replacing the word “mathematics”. I just wonder whether such people are not assigning themselves a more difficult task... ... Je n’ai rien à objecter aux personnes qui se sentent plus à l’aise quand le mot «français» remplace le mot «mathématiques». Je me demande simplement dans quelle mesure ces personnes ne se compliquent pas la tâche... J.-R. Abrial, The B-Book, 1996. Préface Le cours de mathématiques pour l’informatique, de même que le cours de logique des propositions et des prédicats du premier ordre font encore partie de la formation de base des informaticiens. Ainsi les départements d’informatique, dèslacréationdesiut,ont-ilsbénéficiéd’enseignementsdemathématiquespour l’informatique et d’enseignements de logique alors même que la formation dure deux ans et que la plupart des étudiants, il y a 40 ans, ne poursuivaient pas leurs études. Mais, trop souvent, l’utilisation des mathématiques demeure fort limitée pour ne pas dire absente dans le processus qui mène de la spécification du problème à la construction du logiciel. Marc Guyomard présente, dans cet ouvrage,uneapprochedelaconstructiondesalgorithmesrelatifsauxstructures de données, une approche par la preuve. C’est le livre d’un sage! Sapiens ni- hil affirmat quod non probet. L’auteur délivre à la fois un cours original sur les structures de données et une méthode formelle de construction de programmes. Ce livre est au cœur de l’informatique. Il suffit d’y lire les applications des diffé- rentes structures de données, pour constater que l’informatique du XXIe siècle fait un grand usage des structures manipulées dans ce livre. Structures de don- nées et méthodes formelles traite des fondements sans lesquels, malgré la puis- sance actuelle des machines, nous ne disposerions pas des logiciels performants qui sont à la disposition de tous aujourd’hui. Et ceux qui ont utilisé différents systèmes d’exploitation bien connus fournis avec les micro-ordinateurs, peuvent les donner en exemples de la «loi de Reiser» – appelée sur la Toile «Loi de Wirth» alors que N. Wirth ne fait que citer M. Reiser : «Le logiciel ralentit plus vite que le matériel n’accélère.» L’Église catholique en était-elle peut-être consciente en choisissant comme saint patron des informaticiens Isidore de Sé- ville qui, d’après ce que l’on peut lire, répété de nombreuses fois sur la Toile – ce qui n’est pas un gage de vérité1 même si c’est un critère pour améliorer son «page rank» –, aurait inventé les «tries» (l’une des structures étudiées dans ce livre), qui sont appliqués dans son ouvrage célèbre, les Etymologies. Leibniz disait : Sedemus et calculemus, asseyons-nous et calculons. C’est ce que propose Marc Guyomard. Son point de départ est une spécification écrite en utilisant la mathématique élémentaire sur les ensembles et les relations ainsi que la logique des prédicats (le quoi), spécification à partir de laquelle il dérive – il calcule – la représentationdesalgorithmes(lecomment).Ilutiliselanotationdelaméthode B mise au point par Jean-Raymond Abrial, méthode qui a maintenant fait la preuve de son intérêt pédagogique et opérationnel. La notation est en grande 1. En fait, comme le note Donald Knuth dans le tome 3 de son monumental The Art of ComputerProgrammingcitéparmilesdouzemeilleuresmonographiesdusiècleparl’American Scientist–les«Étymologies»sontordonnéesselonunordrelexicographiqueimparfait,portant uniquementsurlapremièrelettre.Delàauxtries,ilyaunlongchemin!... x Structures de données et méthodes formelles partie celle qu’utilisent couramment les mathématiciens et les logiciens, com- plétée par des symboles fort pratiques. Nous pensons à ce propos qu’il est sans doute plus profitable d’enseigner une partie des programmes de mathématiques dans le cadre de l’enseignement de spécification/programmation que d’en faire desenseignementscloisonnés. L’avantage qui enrésulte est de rapprocher l’outil (les mathématiques) de sa principale application (la spécification), compétence aucœurdumétierd’informaticien.Ainsionpeutmettrel’accentsuruneactivité essentielle, celle d’abstraction. La méthode B opère par raffinage, afin de passer de l’abstrait (la spécification) au concret (l’algorithme rédigé dans un langage exécutable sur un ordinateur) et à satisfaire en cours de processus, des obliga- tions de preuves, preuves qui peuvent être assistées par des logiciels. Comme il a réutilisé les spécifications ensemblistes et la logique, Marc Guyomard réutilise le modèle fonctionnel en programmation, modèle très souvent enseigné à juste raison, et il l’applique lors de la dérivation de programmes au lieu d’appliquer le cadre algorithmique. Voilà sur quoi repose l’originalité de la démarche pré- sentée et appliquée par Marc Guyomard dans ce livre. Il a renouvelé le fameux «structure de données + algorithmes = programmes» de N. Wirth en énon- çant «spécifications + fonction d’abstraction + calcul = programme». Il lui restait à choisir quelles structures de données présenter et dans quel ordre. Il a choisi une perspective historique, perspective trop peu souvent utilisée dans les enseignements d’informatique où l’on a parfois tendance à considérer qu’une bibliographiedeplusde5ansd’âgen’apassaplacedansunepublication. Nous avions été séduit par les remarquables polycopiés de Marc Guyomard, en parti- culier un cours sur la compilation et un autre sur la construction de la boucle. C’est avec plaisir que nous avons appris que Marc Guyomard allait diffuser son cours sur les structures de données qu’il dispense aux étudiants de l’Enssat de Lannion.Jesuissûrquelesenseignants,lesétudiants,lespraticiensapprécieront ce livre qui leur fournit à la fois, une présentation raisonnée de très nombreuses structures de données, bien plus que ce que l’on trouve habituellement dans les livres comparables, et une méthode originale de développement de programmes fondé sur la preuve. Toutes les notions et les notations nécessaires pour suivre l’exposé sont présentées, lorsque le besoin s’en fait sentir, Structures de données et méthodes formelles est un livre que les programmeurs doivent avoir à portée de la main. Henri Habrias Professeur émérite à l’Université de Nantes Table des matières Préface ix Avant-propos 1 I Les bases 13 1 Mathématiques pour la spécification et les structures de données 15 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.2 Raisonnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.3 Calcul propositionnel . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.4 Calcul des prédicats . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.4.1 Quantification universelle . . . . . . . . . . . . . . . . . . 22 1.4.2 Deux nouveaux types d’expressions . . . . . . . . . . . . . 25 1.5 Égalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6 Théorie des ensembles . . . . . . . . . . . . . . . . . . . . . . . . 27 1.6.1 Opérations ensemblistes traditionnelles. . . . . . . . . . . 29 1.6.2 Choix dans un ensemble . . . . . . . . . . . . . . . . . . . 30 1.6.3 Relations binaires . . . . . . . . . . . . . . . . . . . . . . 31 1.6.4 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.7 Ensembles particuliers . . . . . . . . . . . . . . . . . . . . . . . . 36 1.8 Exemple de modélisation ensembliste . . . . . . . . . . . . . . . . 40 1.9 Construction de structures inductives. . . . . . . . . . . . . . . . 43 1.10 Démonstration par récurrence . . . . . . . . . . . . . . . . . . . . 43 1.11 Opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 1.11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 47 1.11.2 Expression préconditionnée . . . . . . . . . . . . . . . . . 48 1.11.3 Définition des opérations . . . . . . . . . . . . . . . . . . 48 1.11.4 Évaluation des opérations . . . . . . . . . . . . . . . . . . 50 1.11.5 Propagation des préconditions . . . . . . . . . . . . . . . 52 1.12 Conclusion et remarques bibliographiques . . . . . . . . . . . . . 56 xii Structures de données et méthodes formelles 2 Spécifications + Fonction d’abstraction + Calcul = Programme 59 2.1 Cadre général de la démarche . . . . . . . . . . . . . . . . . . . . 59 2.2 Formalisme pour les types – Exemple. . . . . . . . . . . . . . . . 61 2.3 Calcul des opérations – Exemple . . . . . . . . . . . . . . . . . . 64 2.3.1 Calcul d’une représentation de l’opération plus_n . . . . 66 2.3.2 Calcul d’une représentation de l’opération inf_n . . . . . 68 2.4 Induction, support et renforcement . . . . . . . . . . . . . . . . . 71 2.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3 Étude de quelques structures outils 77 3.1 Listes finies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.1.1 Présentation informelle . . . . . . . . . . . . . . . . . . . 78 3.1.2 Ébauche de construction . . . . . . . . . . . . . . . . . . . 79 3.1.3 Opérations sur les listes . . . . . . . . . . . . . . . . . . . 82 3.1.4 Notation linéaire . . . . . . . . . . . . . . . . . . . . . . . 82 3.2 Arbres finis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.3 Arbres non ordonnés . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.3.1 Introduction : les arbres non ordonnés non étiquetés . . . 85 3.3.2 Arbres non ordonnés étiquetés . . . . . . . . . . . . . . . 85 3.4 Arbres planaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.4.1 Introduction : les arbres planaires non étiquetés . . . . . . 87 3.4.2 Arbres planaires étiquetés . . . . . . . . . . . . . . . . . . 87 3.5 Arbres n-aires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.5.1 Introduction : les arbres n-aires non étiquetés . . . . . . . 88 3.5.2 Les arbres binaires étiquetés. . . . . . . . . . . . . . . . . 89 3.6 Arbres binaires partiellement étiquetés : les arbres externes . . . 96 3.6.1 Présentation informelle . . . . . . . . . . . . . . . . . . . 96 3.6.2 Ébauche de construction . . . . . . . . . . . . . . . . . . . 97 3.6.3 Opérations sur les arbres externes . . . . . . . . . . . . . 98 3.6.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.7 Sacs finis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 3.7.1 Présentation informelle . . . . . . . . . . . . . . . . . . . 100 3.7.2 Ébauche de construction . . . . . . . . . . . . . . . . . . . 101 3.7.3 Opérations sur les sacs . . . . . . . . . . . . . . . . . . . . 102 3.7.4 Propriétés des sacs . . . . . . . . . . . . . . . . . . . . . . 103 3.8 Conclusion et remarques bibliographiques . . . . . . . . . . . . . 104 4 Analyse d’algorithmes 107 4.1 Notations asymptotiques . . . . . . . . . . . . . . . . . . . . . . . 108 4.2 Analyse classique de la complexité de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.2.1 Passage du texte d’une fonction à une équation récurrente . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.2.2 Complexité la meilleure, la pire, moyenne . . . . . . . . . 116 4.2.3 Résolution d’équations récurrentes . . . . . . . . . . . . . 117 4.2.4 Contourner ou simplifier certaines étapes intermédiaires . . . . . . . . . . . . . . . . . . . . . . . . . 120
Description: