Какой алгоритм можно применить для построения сложного дерева детей? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть объект 'Entity', этот Entity содержит атрибут entity_type в простейшей форме:

   class Entity:
       def __init__(entity_type: str):
           self.entity_type = entity_type

Я поддерживал следующие типы сущностей:

    {'entity_a', 'entity_b', 'entity_c', 'entity_d'}

Мне нужно построить потенциально неограниченное (широкое) дерево этих сущностей, есть только 1 ограничение:

entity_a может содержать только потомки entity_b, entity_c и entity_d,

entity_b может содержать только потомковof entity_c, entity_d,

entity_c может содержать только дочерние объекты entity_d,

entity_d не может иметь дочерних элементов

entity_a, хотя может иметь 50 entity_b, в которых может быть 50 entity_c, в которыхможет иметь 50 entity_d.

Глубина здесь составляет максимум 4 уровня, однако ширина может быть неограниченной

Какой подход / алгоритм (ы) могут быть реализованы для этой проблемы?предоставить относительно простой способ построения различных иерархий сущностей?

1 Ответ

1 голос
/ 08 июля 2019

Я бы предложил простейшую вещь, которая могла бы сработать.

class InvalidEntityType(Exception):
    pass

class Entity:
    def __init__(entity_type: str):
        self.entity_type = entity_type
        self.entities = []

    def add_entity(self, entity):
        if self.entity_type < entity.entity_type:
            self.entities.append(entity)
        else:
            raise InvalidEntityType(
                "Entity of type {0} cannot contain entities of type {1}".format(
                    self.entity_type, entity.entity_type))
...