gpt4 book ai didi

algorithm - 如何去掉数学表达式中不必要的括号

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:57:32 25 4
gpt4 key购买 nike

您好,我想知道是否有任何已知方法可以去除数学公式中不必要的括号。我问这个问题的原因是我必须最小化这样的公式长度

if((-if(([V].[6432])=0;0;(([V].[6432])-([V].[6445]))*(((([V].[6443]))/1000*([V].[6448])
+(([V].[6443]))*([V].[6449])+([V].[6450]))*(1-([V].[6446])))))=0;([V].[6428])*
((((([V].[6443]))/1000*([V].[6445])*([V].[6448])+(([V].[6443]))*([V].[6445])*
([V].[6449])+([V].[6445])*([V].[6450])))*(1-([V].[6446])));

它基本上是 sql select 语句的一部分。它不能超过 255 个字符,我不能修改生成此公式的代码(基本上是一个黑框;))如您所见,许多括号是无用的。更不用说:

((a) * (b)) + (c) = a * b + c

所以我想保留括号、乘/除、加/减的运算顺序。

我在 VB 中工作,但任何语言的解决方案都可以。

编辑

我发现了一个相反的问题(在表达式中添加括号)Question .

我真的认为这可以在没有大量解析的情况下完成。但似乎某些解析器将遍历表达式并将其保存在表达式树中是不可避免的。

最佳答案

如果您有兴趣删除表达式中不必要的括号,通用解决方案包括解析您的文本并构建关联的表达式树。

然后,通过应用一些规则,您可以从这棵树中找到没有不必要的括号的相应文本:

  • 如果节点是“+”,则不需要括号
  • 如果节点是“*”,则只有当左(右)子节点是“+”时,左(右)子节点才需要括号
  • 同样适用于“/”

但如果你的问题只是处理这 255 个字符,你可能可以只使用中间变量来存储中间结果

T1 = (([V].[6432])-([V].[6445]))*(((([V].[6443]))/1000*([V].[6448])+(([V].[6443]))*([V].[6449])+([V].[6450]))*(1-([V].[6446])))))
T2 = etc...

关于algorithm - 如何去掉数学表达式中不必要的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com