es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Podar un árbol recursivamente dependiendo de las claves (Python)

Nuevo en Python y tratando de determinar cómo podar un árbol de decisión de manera recursiva mediante la creación de un nuevo árbol. Si un nodo tiene una clave en la lista “claves_para_podar”, éste y sus descendientes no se incluyen en el nuevo árbol. Esto es lo que se me ocurrió:

def podar_arbol(arbol, claves_para_podar):
    nuevo_arbol = Arbol()
    for hijo in arbol.hijos:
        if hijo.clave not in claves_para_podar:
            nuevo_arbol.hijos.append(hijo)
        else:
            podar_arbol(hijo, claves_para_podar)
    return nuevo_arbol

El objeto del árbol (Arbol()) tiene atributos de .clave, .valor y .hijos. Este código no parece funcionar – parece estar comprobando nodos vacíos sin clave y sin valor. ¡Cualquier ayuda sería útil!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para podar adecuadamente un árbol de decisiones de manera recursiva creando un nuevo árbol, es necesario ajustar el código proporcionado. El problema puede ser que la función no esté asignando correctamente el nuevo sub-árbol al nivel apropiado en el árbol original. El siguiente código debe crear una copia nueva del árbol eliminando cualquier nodo que contenga una clave en la lista “keys_to_prune”:

    def prune_tree(tree, keys_to_prune):
        # caso base: devuelve un árbol vacío si se le suministra un árbol vacío
        if tree is None:
            return None
    
        # crea un nuevo árbol con el nodo raíz original del árbol
        new_tree = Tree(tree.key, tree.value)
    
        # itera a través de los nodos hijos del árbol original y agrega los nodos no podados al nuevo árbol
        for child in tree.children:
            if child.key not in keys_to_prune:
                new_child = prune_tree(child, keys_to_prune)
                new_tree.children.append(new_child)
    
        # devuelve el nuevo árbol podado
        return new_tree
    

    Esto debe verificar adecuadamente los nodos vacíos y solo agregar nodos no podados al nuevo árbol.

Comments are closed.