Python 2.7中AND-OR树的存储格式
作者:互联网
我正在做决策树的一些工作,我正在使用AND-OR树作为表示.我正在为这种树寻找合适的存储格式.
以“t”开头的节点是OR节点,节点以“c”开头是(有序!)AND节点.叶子总是以“p”开头.
最初,每个节点包含两部分:节点名称和节点描述.
图片显示了同一决策树的两种不同表示.基本上我需要两种表示,分别是一种简单快速的解决方案,可以将表示转换为彼此.
到目前为止我的想法
数据类型:
Dict:有必要使用有序的字典.此外,存储名称和描述会更容易.
列表会很好,因为订单已定义,但我不知道如何以良好的方式保存节点名称和描述.
节点链接:
基本上,可以使用这两种数据类型.但是我不知道如何将节点相互链接.我应该使用关键字(例如“AND”和“OR”)还是应该嵌套节点?
非常感谢任何意见.
解决方法:
如果使用列表,则可以通过嵌套将它们链接在一起.
就像是:
['t1', ['c1', 'p1', ['c2', 'p2', 'p3']], ['c3', ['c4', 'p4', 'p5'], ['t2', ['c5', 'p6', 'p7'], 'p8']]]
基本结构如下:
BASE := [node_name, left, right]
哪里:
> node_name是(在此示例中)字符串和
>左和右
BASE(隐含地意味着它们是c或t)
节点类型)或节点名称(隐含地表示它们是叶子)
节点)
没有什么能阻止你使用OrderedDicts,但是创建得到了一些麻烦的IMO:
In [26]: from collections import OrderedDict as OD
In [27]: tree = OD((('name', 't1'), ('left', 'c1'), ('right', OD((('name', '...'),)) )))
In [28]: tree
Out[28]:
OrderedDict([('name', 't1'),
('left', 'c1'),
('right', OrderedDict([('name', '...')]))])
最后,您可以创建自己的数据结构:
class Node:
type = ''
left = None
right = None
标签:python,python-2-7,tree,decision-tree 来源: https://codeday.me/bug/20190711/1430072.html