【发布时间】:2014-07-08 17:54:14
【问题描述】:
我有一个带有两个输入 x 和 y 的函数,它根据某些条件(依赖于 x 和 y 的值)返回 z。类似于下面的伪代码。
f(x, y)
if x < a && y < b
return z=x+y;
else if x >= a && x < c && y >= b && y < d
return z=x-y;
else x >= c && y >= d
return z=x*y;
现在我想编写一个几乎充当f 的反函数的函数(我们称之为g)。伪代码应该类似于以下内容:
g(z)
return x1, x2, y1 and y2; //x's, y's are corresponding boundaries for given z
假设f 非常简单,只基于几个条件,返回值就像一些算术语句一样简单(与上面提供的完全相似)。你怎么写g?您是否只需存储来自f 的边界和相应的返回值,然后使用给定的z 在它们之间遍历以找到适当的边界?我想看看其他人是如何破解这个的。请注意,f 也是您自己编写的,您对此一无所知。
注意:假设返回值在任何时候都是不同的,并且在任何情况下都没有任何重叠
【问题讨论】:
-
为什么会返回两对(x, y)?
-
这个问题似乎跑题了,因为它是关于数学的
-
看起来 f 是多对一映射。我怀疑它会有少量的逆!
-
@RachelGallen SO中有数学和算法部分和标签!
-
@AaronGolden 我非常简化了我的问题。这就是为什么我想知道人们如何为这些类型的问题想出一个通用的解决方案。