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

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

以“t”开头的节点是OR节点,节点以“c”开头是(有序!)AND节点.叶子总是以“p”开头.

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

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

enter image description here


enter image description here

到目前为止我的想法

数据类型:

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',OrderedDict([('name','...')]))])

最后,您可以创建自己的数据结构:

class Node:
     type = ''
     left = None
     right = None

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...