我有一个算法可以处理大约 2 到 4,500,000 次方的极大数字。我使用 .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));
}