【问题标题】:How to solve polynomial with 4 or 7 variables in Fastest possible way如何以最快的方式求解具有 4 个或 7 个变量的多项式
【发布时间】:2013-04-17 13:59:10
【问题描述】:

给定方程:

K = Ap + Bq + Cr + Ds.

我试过的解决方案:

我们已经知道的术语:A、B、C、D、K

在给定 p, q, r 的情况下找到术语 s;

p=0, q=0, r=1;
compute() => s = (K - Ap - Bq - Cr)/D;

继续直到 s 变为 对于所有项 p=0, q=0, r=1...n;

同样地继续,直到 s 变为 对于 p=0, q=1..n, r=1...n 的所有项;

和,

最后,继续直到 s 变为 对于 p=1..n、q=1..n 和 r=1..n 的所有项; em>

为更新 p、q 和 r 编写了 3 个循环。

如果 K 变大,例如 1000...、8145、45000 等,计算需要更多时间;

请不要推荐外部库...我正在寻找编码解决方案。

示例片段

for (int i = 0; i < preSpecifiedIterations; i++)
{
 p = i;

 if (A * p > K)  //Exit condition ; if Ap > K
  break;

  for (int j = 0; j < preSpecifiedIterations; j++)
  {
   q = j;

   if (B * q > K) //Exit condition ; if Bq > K
    break;

   for (int k = 1; k < preSpecifiedIterations; k++)
   {
    r = k;
    // compute s given p, q, and r;
    s = (K - (A * p) - (B * q) - (C * r)) / D;

    if (s < 0) //Exit condition ; don't process if s < 0 i.e negative values
     break;
    else
     ...
   }
  }
}

另外,如果有人注意到:preSpecifiedIterations -> 是否可以在计算之前确定需要多少次迭代?

还有没有更好的算法来解决上述问题?

非常感谢您的阅读。

【问题讨论】:

  • 没有人能告诉您最快的方法是什么,因为这取决于许多因素。更好的方法是说“我需要在 4 GHz 64 位 Windows 机器上在 50 毫秒内找到解决方案”,或者无论您的时间预算和硬件是什么。
  • 感谢您的回复..我担心我们能多快得到解决方案,即算法优化......就像可能有 3 到 6 个线程......处理不同的 p 值(p =0, q=1..n and r=1..n) 在一个线程上然后 p=1, q=1..n 和 r=1..n 在另一个线程上.. 同样明智.. 但是如果我们有一个更好的算法,对于任何给定的 K 值,可能不需要多次迭代。当 K 设置为 50,000 时,更新大约需要 10 分钟。
  • 所以为了清楚起见,您正在尝试求解 丢番图方程 是吗?人类研究丢番图方程已有 2300 年的历史,并且有大量关于它们的文献。在这里可以总结的更多。
  • 再次感谢.. 并感谢您指出它.. 是的,它是丢番图方程,但包含更多变量。

标签: c# polynomial-math factorization


【解决方案1】:

这对 StackOverflow 来说不是一个很好的问题;对于数学站点之一来说更好。不过我还是在这里回答吧。

您当然可以比蛮力做得更好,就像您在这里所做的那样。您应该能够在几微秒内计算出答案。

存在一个解当且仅当 (A, B, C, D) 的 最大公约数 均分 K。这是Bézout 身份的扩展形式

为了确定 (1) gcd 是什么以及 (2) p、q、r、s 的值是什么,您可以使用扩展欧几里得算法,您可以阅读该算法这里:

http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm

我的建议是首先编写一个程序来求解ax + by = c 形式的简单线性丢番图方程。完成此操作后,请阅读 Wikipedia 文章中名为“超过两个数字的情况”的部分,该部分描述了如何扩展算法以处理您的情况。

【讨论】:

  • 感谢您提供这些详细信息。有一个小问题,变量 p、q、r 或 s。严格来说应该是积极的。如何使用方程式仅获得正数。
  • @user2290809:您可能应该在 math.stackexchange.com 上提问。自从我不得不解决这些问题已经过去十五年了,我已经生疏了。 (请注意,math.stackexchange.com 适用于任何级别的数学问题;mathoverflow.net 适用于研究级别的数学问题。)
  • 我很抱歉......在这里发布......我确实在 math.stackexchange.com 中询问过这里是链接“math.stackexchange.com/questions/366469/…”但没有得到任何回复。我再次道歉..非常感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 2017-02-10
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
相关资源
最近更新 更多