将 If-Else 语句转换为公式

Ste*_*ven 5 java algorithm math

我有如下代码:

`if (a <= 10){
    z = 5;
 } else {
    z = -1;
 }`
Run Code Online (Sandbox Code Playgroud)

我发现当s(10 - a) = |10 - a| / (10 - a)它输出 1 或 -1 时。它输出1ifa < 10-1if a > 10

然后,我只是求解线性方程z = s(10 - a) * m + b,以找到常数 m 和 b。

5 = 1 * m + b-1 = -1 * m + b 哪个输出b = 2, m = 3

那么这可以建模为z = 3 * s(10 - a) + 2.

现在这个问题变得更加棘手。如果嵌套 if 语句中有两个变量怎么办?如:

`if (a <= 10){
    if(b <= 3){
       z = 3;
    } else {
       z = 1;
    }
 } else {
    if(b <= -5){
       z = -11;
    } else {
     z = 4;
    }
}`
Run Code Online (Sandbox Code Playgroud)

我尝试使用另一系列线性方程来解决这个问题。

  1. 3 = A * s(10 - a) + B * s(3 - b) + C
  2. 1 = A * s(10 - a) + B * s(3 - b) + C
  3. -11 = A * s(10 - a) + D * s(-5 - b) + C
  4. 4 = A * s(10 - a) + D * s(-5 - b) + C

以 A、B、C、D 作为常数。然而,这并没有给我正确的答案。我究竟做错了什么?

mar*_*aca 6

可以使用以下技巧将 if 语句转换为公式:我们需要找到一个公式,如果该if语句为真,则为1 ,否则为 0。我们可以为此使用 signum 函数:

 f(x, y) = (sign(y - x) + 1) / 2
Run Code Online (Sandbox Code Playgroud)

如果 x < y,f(x, y) 为 1,如果 x > y,则为 0。逆 g(x, y) = 1 - f(x, y)。

因此,通过这两个公式,我们可以轻松地将整个事情放在一起:

f(a, 10) * (f(b, 3) * 3 + g(b, 3) * 1) + g(a, 10) * (f(b, -5) * -11 + g(b, -5) * 4)
Run Code Online (Sandbox Code Playgroud)