假设我们有两个正整数变量:
x = [1, W]
y = [1, H]
功能:
F(x, y)
任务是找到 x 和 y ,它给出了函数的最大输出值(在范围内)。
F 功能的一部分已知为区域:
F(x, y) = (x * y) * T(x, y)
现在另一个函数 T(x,y)有一些有趣的属性:
T(x + c, y) <= T(x, y)
T(x, y + c) <= T(x, y)
其中 c 是任何大于零的正整数(间接使 T(x + c,y + d)为真,其中 d 具有与 c )相同的约束。
通过测试所有可能的 x / y 组合,可以轻松找到可行的解决方案,但复杂性为 O(W * H)。
有没有办法利用上述属性来降低复杂性?
2D或类似二元搜索等价的东西?
以某种方式走边界?
你们中任何一个聪明的人都有任何有趣的想法或指示吗?
T(x,y)的输出示例:
9 7 7 4 2
8 7 6 4 2
8 7 5 4 1
6 5 3 3 0
3 3 2 1 0
在此示例中, x = 4 且 y = 3 给出最大值: 4 * 3 * T(4,3)< / strong> = 4 * 3 * 4 = 48 。
答案 0 :(得分:0)
让R(x,y)
成为满足
R(x,y) >= 1
以及以下Lipschitz条件:适用于(x,y)
中的所有[1,W]x[1,H]
,
|R(x,y)-R(x+1,y)| <= 0.5 * 1/(W*H)^2
|R(x,y+1)-R(x,y)| <= 0.5 * 1/(W*H)^2
然后,这是一个简单的微积分练习,表明R(x,y)/(x*y)
是x
和y
的递减函数。
因此,我们可以通过T(x,y) = R(x,y)/(x*y)
提出您的问题。我们得到F(x,y) = R(x,y)
的最大化问题。由于没有快速获取Lipschitz连续函数的最大方法,因此您的问题并不能承认比穷举搜索更好的解决方案。