Aller au contenu

Récursivité dans l'algorithmique et la programmation/Exercices/Structure de données récursives

Leçons de niveau 13
Une page de Wikiversité, la communauté pédagogique libre.
Structure de données récursives
Image logo représentative de la faculté
Exercices no3
Leçon : Récursivité dans l'algorithmique et la programmation
Chapitre du cours : Structure de données récursives

Exercices de niveau 13.

Exo préc. :Algorithmes récursifs
Exo suiv. :Sommaire
En raison de limitations techniques, la typographie souhaitable du titre, « Exercice : Structure de données récursives
Récursivité dans l'algorithmique et la programmation/Exercices/Structure de données récursives
 », n'a pu être restituée correctement ci-dessus.




Structure de données récursives : une structure de type dictionnaire

[modifier | modifier le wikicode]
Panneau d’avertissement À lire absolument, avant de commencer l'exercice

Nous nous proposons ici de créer une structure de données permettant de contenir un dictionnaire, c'est-à-dire tout simplement une liste de mots. Si nous ouvrons un dictionnaire nous observons une liste[1] telle que :

  • A, subst. masc. : ... définition
  • À, prép, : ... définition
  • AALÉNIEN, IENNE, adj. et subst. masc. : ... définition
  • AB-, préf. : ... définition
  • ABA, subst. masc. : ... définition
  • ABACA, subst. masc. : ... définition
  • ... ainsi de suite
  • ZYMOTIQUE, adj. : ... définition
  • ZYTHUM, subst. masc. : ... définition
  • ZZZ, onomat. : ... définition


Dans cet exercice, nous nous limiterons uniquement aux vedettes (le mot dont la définition est donnée à la suite, une entrée du dictionnaire), sans conserver ni leurs genres, ni leurs définitions, ni leur casse (tous les mots seront écris en minuscules). Un tel lexique pourra être tiré du dictionnaire mis à disposition par le CNAMCNAM. Il comprend 251307 mots différents (~2,6 Mo, ce qui fait une moyenne 9.8 caractères par mot).

Un tel lexique peut être stocké dans un tableau à 251307 entrées (une par mot) ou dans une liste chaînée de mots. Mais en y regardant de plus près, on remarque que des mots consécutifs dans le lexique trié ont souvent un préfixe commun :

  • INAPPARENT
  • INAPPÉTENCE
  • INAPPLICABLE
  • INAPPLICATION
  • INAPPLIQUÉ
  • INAPPRÉCIABLE
  • INAPPRÉCIÉ
  • INAPPRÊTÉ
  • INAPPRIVOISABLE
  • INAPPRIVOISÉ
  • INAPPROCHABLE

Il est tentant de factoriser les préfixe INAPP sur toute cette liste :

  • INAPP
    • ARENT
    • ÉTENCE
    • LICABLE
    • LICATION
    • LIQUÉ
    • RÉCIABLE
    • RÉCIÉ
    • RÊTÉ
    • RIVOISABLE
    • RIVOISÉ
    • ROCHABLE

On peut réitérer le procédé dans la sous-liste

    • LICABLE
    • LICATION
    • LIQUÉ

pour la transformer en

    • LI
      • CABLE
      • CATION
      • QUÉ

Si on poursuit à plus soif on obtient à partir de la première liste des INAPP

  • INAPP
    • ARENT
    • ÉTENCE
    • LI
      • CA
        • BLE
        • TION
      • QUÉ
      • CI
        • ABLE
        • É
    • RÊTÉ
    • RIVOISA
      • BLE
    • ROCHABLE

On reconnaît là la naissance d'une structure arborescente. Mais il subsiste un petit problème, celui d'un mot entièrement contenu dans un autre. Considérons la liste

  • BAL
  • BALS
  • BALLE
  • BALLES

La construction nous conduit à

  • BAL
    • S
    • LE
      • S

Pour simplifier les choses, nous ajoutons à la fin de chaque mot un marqueur de fin de mot qui sera noté , celà nous conduit à quelque chose comme :

  • BAL
    • =bal
    • S =bals
    • LE
      • =balle
      • S =balles

Transformer un arbre n-aire en arbre binaire

[modifier | modifier le wikicode]

Question de point de vue

[modifier | modifier le wikicode]

Le dictionnaire sous forme arbre binaire

[modifier | modifier le wikicode]
  1. tirée du TLF : le trésor de la langue française informatisé[1]