Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取RPN树大小_Python_Tree_Genetic Algorithm_Genetic Programming_Rpn - Fatal编程技术网

Python 获取RPN树大小

Python 获取RPN树大小,python,tree,genetic-algorithm,genetic-programming,rpn,Python,Tree,Genetic Algorithm,Genetic Programming,Rpn,我已经实现了下面的“tree sizer”,但它在某些情况下失败,下面的示例返回大小2,而它应该返回大小4,有人能帮我吗。我已经写了好几次了,但都没有用,它总是失败 def getRPNdepth(expression): treesize=0 maxtreesize=treesize mintreesize=treesize tmpexp=expression tmpfmla = [1 if n[0] == 'x' else n for n in tmp

我已经实现了下面的“tree sizer”,但它在某些情况下失败,下面的示例返回大小2,而它应该返回大小4,有人能帮我吗。我已经写了好几次了,但都没有用,它总是失败

def getRPNdepth(expression):
    treesize=0
    maxtreesize=treesize
    mintreesize=treesize
    tmpexp=expression
    tmpfmla = [1 if n[0] == 'x' else n for n in tmpexp]
    print(tmpfmla)
    try:
        stack = []
        for val in tmpfmla:
            if val in ['-', '+', '*', '/']:

                op1 = stack.pop()
                op2 = stack.pop()
                if val == '-': result = op2 - op1
                if val == '+': result = op2 + op1
                if val == '*': result = op2 * op1
                if val == '/':
                    if op1 == 0:
                        result = 1
                    else:
                        result = op2 / op1
                stack.append(result)
                treesize=treesize+1
            else:

                stack.append(float(val))
                treesize = treesize - 1

            if treesize>maxtreesize:
                maxtreesize=treesize
            if treesize<mintreesize:
                mintreesize=treesize
        return abs(mintreesize)
    except:
        print('error validate rpn>' + str(expression))
        return 0



xxxx = ['x6', 'x7', '+', 'x7', '+', 'x7', '+', 'x7', '+']
print(getRPNdepth(xxxx))
def getRPNdepth(表达式):
treesize=0
maxtreesize=treesize
mintreesize=树大小
tmpexp=表达式
tmpfmla=[1如果n[0]='x'否则n代表tmpexp中的n]
打印(tmpfmla)
尝试:
堆栈=[]
对于tmpfmla中的val:
如果val在['-'、'+'、'*'、'/']中:
op1=stack.pop()
op2=stack.pop()
如果val='-':结果=op2-op1
如果val='+':结果=op2+op1
如果val='*':结果=op2*op1
如果val=='/':
如果op1==0:
结果=1
其他:
结果=op2/op1
stack.append(结果)
treesize=treesize+1
其他:
stack.append(float(val))
treesize=treesize-1
如果treesize>maxtreesize:
maxtreesize=treesize

如果treesize好的,只是做了一点“欺骗”,并使用我的rpn到中缀转换器来实现相同的目标,如果有人需要,我将它发布在这里

def getRPNdepth(expression):
    tmpexp = expression
    tmpfmla = [1 if n[0] == 'x' else n for n in tmpexp]
    stack = []
    for val in tmpfmla:
        if val!=' ':
            if val in ['-', '+', '*', '/']:
                op1 = stack.pop()
                op2 = stack.pop()
                stack.append('(' + str(op1) + str(val) + str(op2) + ')')
            else:
                stack.append(str(val))

    openparentesiscount=0
    maxopenparentesiscount = 0

    onlyparentesis=''
    for c in stack[0]:
        if c in ['(', ')']:
            onlyparentesis=onlyparentesis+c
            if c=='(':
                openparentesiscount=openparentesiscount+1
            else:
                openparentesiscount = openparentesiscount - 1
        if openparentesiscount>maxopenparentesiscount:
            maxopenparentesiscount=openparentesiscount

    return maxopenparentesiscount

谢谢大家

计算树深度与计算表达式类似,但运算符计算结果深度而不是结果值:

def getRPNdepth(expression):
    stack = []
    for val in expression:
        if val in ['-', '+', '*', '/']:
            stack.append(max(stack.pop(),stack.pop())+1)
        else:
            stack.append(1)
    return stack.pop()

什么是“树的大小”?一般情况下,不应将mintreesize和maxtreesize初始化为相同的值。我称之为树大小的是树的深度。mittreesize和maxtreesize初始化为相同的值,因为树尚未“测量”