Python 2.7中AND-OR树的存储格式

时间:2016-08-19 10:01:00

标签: python python-2.7 tree decision-tree

我正在使用决策树做一些工作,我正在使用AND-OR树作为表示。我正在为这种树寻找合适的存储格式。

以" t"开头的节点是一个OR节点,节点以" c"是一个(有序!)AND节点。叶子始终以" p"。

开头

最初,每个节点都包含两部分:节点名称和节点描述。

显示同一决策树的两种不同表示的图片。基本上我需要两种表示,分别是一种简单快速的解决方案,可以将表示转换为彼此。 enter image description here enter image description here

到目前为止我的想法

数据类型:

Dict:有必要使用有序的字典。此外,存储名称和描述会更容易。

列表很好,因为订单已定义,但我不知道如何以良好的方式保存节点名称和描述。

节点链接:

基本上,可以使用这两种数据类型。但是,我不知道如何将节点相互链接。我应该使用关键字(例如" AND"和" OR")还是应该嵌套节点?

非常感谢任何意见。

1 个答案:

答案 0 :(得分:0)

< p>如果您使用列表,则可以通过嵌套将它们链接在一起。 类似于:< / p> < pre>< code> [' t1',[' c1',' p1',[' c2',' ; p2',' p3']],[' c3',[' c4',' p4',' p5'],[' t',[' c5',' p6',' p7'],' p8& #39;]]] < /代码>< /预> < p>基本结构将是:< / p> < pre>< code> BASE:= [node_name,left,right] < /代码>< /预> < p为H.其中:其中/ p为H. < UL> <李><代码> NODE_NAME< /代码>是(在此示例中)字符串和< / li> <李><代码>左< /代码>和< code>对< / code>是 或者< code> BASE< / code> (这隐含地意味着它们是< code> c< / code>或< code> t< / code> 节点类型)或< code>节点名称< / code> (这隐含地意味着它们是叶子 节点)LT /立GT; < / UL> < p>没有什么能阻止您使用< code> OrderedDict< / code> s但是创建会变得更加麻烦IMO:< / p> < pre>< code>在[26]中:从集合导入OrderedDict作为OD 在[27]中:树= OD(('名称',' t1'),('左',' c1'), ('对',OD(('名称',' ...'),)))))) 在[28]:树 出[28]: OrderedDict([(' name',' t1'),              ('离开',' c1'),              ('右',OrderedDict([(' name',' ...')]))]) < /代码>< /预> < p>最后,您可以创建自己的数据结构:< / p> < pre>< code>类节点:      type =''      左=无      对=无 < /代码>< /预>