小编die*_*les的帖子

朱莉娅 评估数学树的最快方法是什么

我有一个代表数学函数的数据树,如下所示:\n在此输入图像描述

\n

它存储在数组中,因此 2+3^2 将表示为:

\n
["+", 2, ["^2", 3] ]\n
Run Code Online (Sandbox Code Playgroud)\n

为了实际评估树,我有一个递归函数

\n
function evaluate(mathstructure::Array)\n    if mathstructure[1] == "+"\n        # do the operation\n        evaluate(mathstructure[2]) + evaluate(mathstructure[3])\n    elseif mathstructure[1] == "*"\n        # do the operation\n        evaluate(mathstructure[2]) * evaluate(mathstructure[3])\n    elseif mathstructure[1] == "\xcf\x83"\n        # do the operation\n        x = evaluate(mathstructure[2])\n        1 / (1 + exp(-x))\n    elseif mathstructure[1] == "^2"\n        # do the operation\n        x = evaluate(mathstructure[2])\n        x^2\n    end\nend\nfunction evaluate(mathstructure::Variable)\n    mathstructure.value\nend\n\n
Run Code Online (Sandbox Code Playgroud)\n

(我实际上有一个Variable结构,它有一个值和一个标识符来表示数字,所以我可以稍后更改常量)

\n

这段代码可以工作,但是速度非常慢。我应该采取哪些步骤来优化其性能?我无法使用尾递归,因为该函数通常会调用其自身两次。

\n

谢谢你!

\n

-迭戈

\n

performance data-structures julia

2
推荐指数
1
解决办法
148
查看次数

标签 统计

data-structures ×1

julia ×1

performance ×1