Hay un algoritmo codicioso para encontrar la cobertura mínima de vértice de un árbol que utiliza el recorrido DFS.
- Para cada hoja del árbol, seleccione su padre (es decir, su padre está en la cobertura mínima de vértice).
- Para cada nodo interno:
si alguno de sus elementos secundarios no está seleccionado, seleccione este nodo.
¿Cómo pruebo que esta estrategia codiciosa da una respuesta óptima? ¿Que no hay una cubierta de vértice más pequeña que la que produce el algoritmo anterior?
algorithms
trees
greedy-algorithms
e_noether
fuente
fuente
Respuestas:
En primer lugar, observe lo siguiente: Hay una cubierta óptima , y ninguna hoja se encuentra en C . Esto es cierto ya que en cualquier cubierta óptima X puede reemplazar todas las hojas en X con sus padres, y se obtiene una cubierta de vértices que no es más grande que X .C C X X X
fuente
Sugerencia: construya una coincidencia del mismo tamaño que la cubierta de su vértice haciendo coincidir cada vértice de la cubierta con un elemento secundario no seleccionado. PruebaloEl | METROEl | ≤ | CEl | para cualquier coincidencia METRO y cualquier cubierta de vértice C . Concluya que la cubierta del vértice es mínima y la coincidencia es máxima.
fuente