我有一个非常简单的语言,它被编译成一个表达式树,然后被评估。用户可以定义数学运算、使用变量和控制流程。此外,还可以从脚本中读取外部输入,该输入对于给定的评估是固定的(即,如果重复调用,它会输出相同的值)。例如,这是一个有效的脚本:
if readInput() < 10 then
x = 2 * readInput()
else
x = 0
end
我的问题:对于给定的输入域,我需要计算
x
的最大值和最小值,例如[0, 1000]
.
我想到的解决方案:
分配给
readInput()
域的边界并评估x
的值。它在许多情况下有效,但在许多其他情况下失败,例如在上面的情况下,它在 x = 0
和 0
中评估为
1000
以数字方式计算最大/最小值,这在很多情况下都有效,但计算量大,并且不能保证达到最大值,尤其是在存在不连续性时
以某种方式转换树并使用符号数学库来计算边界
我还缺少其他选择吗?
你可以动态地做
max = -∞
...
if x > max then
max = x
...
最后
max
保持最大值或-∞如果没有输入值