您好我正在尝试为编程问题解决此等式,该问题表明您需要执行完整的搜索算法才能找到此结果。
然而,O(N ^ 4)算法需要花费大量时间,因为A,B,C和D的每个值的范围是(0,2000)。因此我们可以说A <= B&lt; =℃下= d
我想让我的算法更快地将其转换为O(n ^ 3)解决方案。为了做到这一点,我考虑了A,B和C的某些事情,使算法运行得更快(prunning)。但主要的问题是拿出D的搜索,我已经阅读了一些针对类似问题的解决方案以及他们找到的方式D从A + B + C = A * B * C推导它真的很混乱,有人可以解释一下我这个问题的O(N ^ 3)解决方案?非常感谢!
答案 0 :(得分:5)
等式
A * B * C * D == A + B + C + D
只有一个解决方案
1 1 2 4
所以时间复杂度为O(1)
。
自A <= B <= C <= D
以来,
A + B + C + D <= 4 * D
因此
A * B * C * D <= 4 * D
和
A * B * C <= 4
因此,仅检查几种组合就足够了:
for(int a = 1; a <= 4; a++)
for(int b = a; b <= 4; b++)
for(int c = b; c <= 4; c++)
{
// a*b*c*d == a+b+c+d
// => d == (a+b+c) / (a*b*c - 1)
if(a * b * c - 1 != 0 && (a + b + c) % (a * b * c - 1) == 0)
{
int d = (a + b + c) / (a * b * c - 1);
if (d >= c)
Console.WriteLine("{0} {1} {2} {3}",
a, b, c, (a + b + c) / (a * b * c - 1));
}
}
答案 1 :(得分:3)
等效地d =(a + b + c)/(abc-1)。现在只需遍历a,b和c的所有值,看看哪些值返回d的整数值。
此外a + b + c <当a,b,c> = 2时,abc-1应该缩短你的搜索时间......