对于大整数,计数限制如何花费太多时间?

时间:2018-11-14 21:12:01

标签: time stack limit

我和弗拉基米尔·格里戈夫都有严重的问题。

在我们的工作中,我们现在研究非常困难的算法,该算法使用限制来确定特定结果。

Alghoritm繁重,经过两个月的工作,我们发现确实存在严重问题。我们的分析团队告诉我要解决此问题。

首先,我告诉你这个问题,必须通过限制来解决: 我们数据库中的数据很多。 Ec INT_MAX。 对于每个数据,我们必须按照算法将它们分类为两组,一组必须具有红色解释,第二组必须具有蓝色。

该算法使用ID字段进行计数,该ID字段是一些AUTO_INCREMENT值。对于此值,我们检查该值是否等于1。如果是,则为红色数据。如果为零,则为蓝色数据。如果更多。然后,必须减去2,然后再次检查。

我们通过for循环来选择大型头脑风暴方法,但是对于更大的对象来说,这确实很慢。所以我们想删除周期,而我的同事告诉我使用递归。

我这样做了。但是...实施后,我遇到了一个未知的大整数错误,例如long long int并在他被写道:“ Stack Overflow Exception”

因此我决定在这里写,因为IDE告诉了我该页面的名称,所以我认为这里可能是Answer。

非常感谢。大家。

1 个答案:

答案 0 :(得分:0)

在您发表评论后,我想我可以解决它:

python manage.py

任何val的中途值都会轻易打破这一点。这根本不可能与递归一起使用。没有CPU支持将堆栈跟踪关闭延长一半。MaxInt!

但是您的代码存在一些一般性问题:

  1. 现在,这是有史以来最复杂的“偶数”检查。大多数人使用Modulo来解决这一问题。 public bool isRed(long long val) { if (val==1) {return true; } else if (val==0) { return false; } else { return isRed(val - 2); } }
  2. 长久长的类型似乎已关闭。您是否重复过该类型?您是要使用BigInteger吗?
  3. 如果减去的值不是静态的,并且不能通过模来求解,那么这里就没有理由不使用循环。

    if(val%2 == 0) return false; else return true;