我有周围幂4,500,000 2的顺序非常大的数字作品的算法。我使用.NET 4中的BigInteger类来处理这些数字。计算算法时间
的算法是,它是一个单环,降低基于某些预定义的标准大的初始数目非常简单。随着每次迭代,数量减少约10个指数,因此在下一次迭代中4,500,000个将变为4,499,990个。
我目前得到每秒5.16迭代或每个迭代0.193798秒。基于该算法的总时间应大致为22小时以使指数值降至0.
问题是,随着数量的减少,处理内存中所需的时间也减少。另外,随着指数减少到200,000个范围,每秒迭代次数变得巨大,并且每次迭代的减少也呈指数增长。
与其让算法中跑了一整天,有没有计算,将花费的时间根据初始起始编号和每秒迭代的数学方法是什么?
这将是非常有益的,因为我可以快速地衡量优化的尝试改进。
考虑以下伪代码:
double e = 4500000; // 4,500,000.
Random r = new Random();
while (e > 0)
{
BigInteger b = BigInteger.Power(2, e);
double log = BigInteger.Log(b, 10);
e -= Math.Abs(log * r.Next(1, 10));
}
正在增加é? – CR41G14 2013-02-13 11:41:15
@thang:如果我以200,000的指数值开始,算法只需要几秒钟来处理。该算法当然要复杂得多,但上面的代码会产生相同的结果,因为每次迭代的大部分时间都由BigInteger构造函数进行计算。所以你可以想象,随着数字的减少,它会大幅加速。 – 2013-02-13 11:44:27
@ CR41G14:我的错误。修复了代码。每次迭代都会减少“e”。 – 2013-02-13 11:47:03