24-NSIJ2G11-2
-
La commande
ls documents
affiche le contenu du répertoiredocuments
depuis le répertoire couranthome
. -
La commande déplace le répertoire
multimedia
(avec tout son contenu) dans le répertoiredocuments
. Dans l'arborescence, cela revient à détacher le sous-arbre de racinemultimedia
, pour le rattacher ensuite sous le nœudcours
. -
La classe
Arbre
modèlise ici un arbre binaire, or un répertoire peut contenir plus de deux répertoires, commedocuments
qui en contient trois. -
Le parcours réalisé ici est un parcours préfixe, la racine est traitée avant les sous-arbres.
-
Un parcours un largeur pourrait parcourir dans l'ordre :
home
documents
multimedia
cours
administratif
personnel
images
video
films
. -
Quelques alternatives :
-
Lors des différents appels récursifs, lorqu'on atteint une feuille de l'arbre, un dossier vide, sa liste
fils
est aussi vide, donc cela termine la récursion. -
La commande
ls
n'est par défaut récursive et liste aussi les fichiers présents. -
Puisqu'un dossier de classe
Dossier
n'a pas un accès direct à son dossier parent, on doit explorer toute l'arborescence depuis la racine pour le retrouver, avec un parcours en profondeur par exemple. Dès qu'on découvre le dossier fils dans la descendance d'un dossier, on renvoie alors le nom de ce dernier. La méthode précédente peut donc être adaptée :def parent(self, nom_dossier): for f in self.fils: if f.nom == nom_dossier or f.contient(nom_dossier): return self.nom return None
En conclusion, cet algorithme visite une seule fois chacun des \(n\) dossiers ainsi que chacun des \(m\) liens (ou arcs) de l'arborescence. Son coût est donc en \(O(n + m)\) dans le pire des cas.
-
Il suffirait de stocker une référence vers le dossier parent pour y accéder en temps constant \(O(1)\) :