python - 哪种算法可以用来构建复杂的子树?
问题描述
我有一个“实体”对象,这个实体包含一个 entity_type 属性,以最简单的形式:
class Entity:
def __init__(entity_type: str):
self.entity_type = entity_type
我支持以下实体类型:
{'entity_a', 'entity_b', 'entity_c', 'entity_d'}
我需要构建这些实体的潜在无限(宽)树,只有一个约束:
entity_a 只能包含 entity_b、entity_c 和 entity_d 的孩子,
entity_b 只能包含 entity_c、entity_d、
entity_c 只能包含 entity_d 的孩子,
entity_d 不能有孩子
entity_a 可能有 50 个 entity_b,其中可能有 50 个 entity_c,其中可能有 50 个 entity_d。
这里的深度最多为 4 层,但宽度可以不受限制
可以针对此问题实施哪些方法/算法?提供一种相对简单的方法来构建各种实体层次结构?
解决方案
我会建议可能可行的最简单的事情。
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))
推荐阅读
- c++ - 初始化函数变量时,VC ++参数值在函数内部发生变化
- javascript - Swiper Slider...移除箭头
- git - 在本地 git 服务器上创建拉取请求和合并分支
- c# - WPF ListView Multi-Select MVVM,后面有最少的代码
- python - Keras中图像分割的像素损失权重
- sql - 多行到一行。得到所有的日子,而不是那些匹配课程的日子。以下是结果
- angular - 订阅选择器返回未定义
- django - Form.is_valid() 返回 False?
- google-drive-api - 通过共享链接预览文件
- android - 奥利奥抬头通知 - 如何检测/拦截用户向状态栏滑动通知?