【问题标题】:Optimize/Reduce condition expression in if statement优化/减少if语句中的条件表达式
【发布时间】:2020-06-11 20:59:41
【问题描述】:

目标是通过查找变量之间的值依赖关系来优化大条件表达式,以减少逻辑 OR 语句

假设我们有以下条件:

if((A == 0 && B == 0) ||  (A == 0 && B == 1) || (A == 0 && B == 2) ...

一定次数... 有没有办法通过自动满足以下条件来减少这种示例:

if(A == 0 && (B >= 0 && B <= 2))

第一个条件中涉及的数字仅在条件之前已知,不能手动输入。条件中还可能涉及数百个逻辑 OR 运算符。值之间可能存在差距(可能需要使用 % 运算符),但总有一种模式

任何可以找到变量之间依赖关系的库或现有算法?

让我们再举一个例子:

if((A == 0 && B == 0) ||  (A == 0 && B == 2) || (A == 0 && B == 4)

可以翻译为:

if((A == 0 && B%2 == 0)

还有一个:

if((A == 0 && B == 0 && C == 0) ||  (A == 0 && B == 2 && C == 0) || (A == 0 && B == 4 && C == 0) || (A == 0 && B == 0 && C == 1) ||  (A == 0 && B == 2 && C == 1) || (A == 0 && B == 4 && C == 1))

会变成:

if(A==0 && B%2==0 && C>=0 && C<=1)

对于涉及的变量,我有每个术语的所有值。

我有类似[[0,0,0],[0,2,0],[0,4,0],[0,0,1],[0,2,1],[0,4,1]] 的东西(例如最后一个例子)

感谢您的时间和回答!

【问题讨论】:

  • 离散数学可以帮助您(如果您是大学生,您可能已经知道,否则请查看en.wikipedia.org/wiki/Sequent)。但是,这只会帮助您简化条件,而不是像“%”这样的东西
  • 你能有“混合”或更复杂的模式吗,[[0, 2],[0, 4],[1,3],[1, 5]] (B%2=A) 或(B+A) % 3 == 1。从您的示例中,您似乎可以通过单个变量进行推理,因此可以测试一些预定义的模式(常数、范围、gcd 取模,...)
  • @Jarod42 可以有复杂的模式,但不能与 2 个变量混合(B%2=A 不可能发生),它总是链接到一个常量
  • @Berto99 去看看

标签: c++ if-statement optimization


【解决方案1】:
if((A == 0 && B == 0) ||  (A == 0 && B == 2) || (A == 0 && B == 4)

无法翻译成

if((A == 0 && B%2 == 0)

因为

B == 6

等等

【讨论】:

  • 有 2 个选择:我有 (A == 0 &amp;&amp; B == 6) 在条件下,所以它可以工作,或者B 将停止在值 5 上,所以没有问题。它可以持续到B == 6000 或更多,但我无法预测。这是示例
猜你喜欢
  • 2016-02-28
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
相关资源
最近更新 更多