J'ai une forêt, c'est-à-dire des nœuds avec des bords dirigés et aucun cycle (dirigé ou non). Je définis la hauteur d'un sommet comme 0 s'il n'a pas d'arêtes entrantes, ou le nombre maximum d'arêtes à parcourir en sens inverse pour atteindre un sommet de hauteur 0.
Je sais également que le degré moyen d'un nœud est une petite constante, disons environ 2. Pour trouver la hauteur de tous les sommets, je peux penser à deux algorithmes:
Algorithme de marche
- Parcourez et marquez pour les sommets sans arêtes entrantes.
- Pour chaque sommet avec , suivez les bords sortants, en mettant à jour la hauteur de chaque sommet rencontré si sa hauteur précédente est plus petite.
Algorithme de frontière
- Parcourez et marquez pour les sommets sans arêtes entrantes, et marquez-les comme frontière.
- Pour chaque sommet de frontière, voyez si son parent a des enfants à la frontière ou en dessous. Si c'est le cas, marquez le parent comme ayant plus la plus grande hauteur parmi ses enfants. Marquez le parent comme étant à la frontière.
- Répétez 2 jusqu'à ce qu'il n'y ait rien au-delà de la frontière.
Mes questions:
- Y a-t-il un nom pour ce problème et une solution la plus rapide bien connue?
- J'ai tendance à penser simplement en remontant de toutes les vertices est la solution la plus rapide. Ai-je raison?