我一直在尝试添加一种存储和检索程序animal.py获得的知识的方法,这是一个通过二叉决策树工作的“20 个问题”学习算法。(请点击链接查看原程序)
在原始程序中,我为每个节点添加了“向上”状态,以指向决策树中节点的父节点,以便更轻松地在树上上下移动。我还使用正则表达式将所有非字母数字用户输入更改为空格,因此用户不会混淆我的两个新功能:
def know(know):
#Load preset knowledge
p=node("")
knowledge=p
for char in know:
if char not in "+-":p.question+=char
if char=="+":
p.right=node("")
p.right.up=p
p.left=node("")
p.left.up=p
p=p.right
if char=="-": p=p.up.left
return knowledge
def output(node,accum=""):
#Output all knowledge
accum=accum+node.question
if node.right!= None : accum=output(node.right,accum+"+")
if node.left!= None : accum=output(node.left,accum+"-")
return accum
函数“输出”旨在返回作为单个字符串传递给它的节点下方的完整树,其中“+”和“-”字符指示该字符串跟随哪个节点。函数“know”应该采用先前由“output”创建的字符串,创建二叉决策树并返回指向顶部节点的指针。这是我无法弄清楚的不太有效的部分。(目前我是直接将初始知识字符串输入到程序源中:加载和保存文件会在后面添加,看起来很简单)
例如: output(know('mineral+crystal+quartz-obsidian-nothing')) 返回:'mineral+crystal+quartz-obsidiannothing-'
它应该在哪里返回原始字符串:'mineral+crystal+quartz-obsidian-nothing'
我确信这应该可行(理论上),但我已经碰壁了,我真的很迷茫为什么它不是。
我的想法是错误的,还是只是我试图实现它?有没有更好的方法来存储从原始程序创建的决策树?
我是一个狂热的读者,但第一次发布到 stackoverflow,并且对这个网站上的人才感到敬畏,所以我非常期待你的想法。