Tengo un bosque, es decir, nodos con bordes dirigidos y sin ciclos (dirigidos o no dirigidos). Defino la altura de un vértice como 0 si no tiene bordes entrantes, o el número máximo de bordes para atravesar en reversa para alcanzar un vértice de altura 0.
También sé que el grado promedio de un nodo es una constante pequeña, digamos 2 más o menos. Para encontrar la altura de todos los vértices, puedo pensar en dos algoritmos:
Algoritmo Caminante
- Pase y marque para vértices sin bordes entrantes.
- Para cada vértice con , siga los bordes salientes, actualizando la altura de cada vértice encontrado si su altura anterior es menor.
Algoritmo de frontera
- Pase y marque para vértices sin bordes entrantes, y márquelos como la frontera.
- Para cada vértice fronterizo, vea si su padre tiene hijos en o debajo de la frontera. Si lo tiene, marque al padre como teniendo más la altura más grande entre sus hijos. Marque al padre como estando en la frontera.
- Repita 2 hasta que no haya nada más allá de la frontera.
Mis preguntas:
- ¿Hay un nombre para este problema y una solución más rápida y conocida?
- Tiendo a pensar que simplemente caminar desde todos los vértices es la solución más rápida. Estoy en lo cierto?