【问题标题】:How to calculate the time cost of a nested loop如何计算嵌套循环的时间成本
【发布时间】:2017-12-18 07:05:51
【问题描述】:

我可以在我的 Windows 计算器中输入一个数学公式来计算嵌套循环的时间成本吗?

根据我的阅读,我看到了 O(n) 之类的东西,但我不知道如何将其放入计算器中。

我有一个 300 级的嵌套循环,每个循环级别将从 0 到 1000

原来是这样的:

for i as integer =0 to 1000
{
 //300 more nested loops, each goes from 0 to 1000
}

我假设 1 个完整的循环需要 1 秒(即从最顶层循环到最内层循环的 300 个级别需要 1 秒)。

我怎样才能知道完成整个循环操作需要多少秒?

谢谢

【问题讨论】:

  • 如果嵌套 301 个循环,每个循环有 1001 个步骤,最里面的代码将运行 1.3510061352833213568150396557293666843498038319887390... × 10^903 次。在你取得任何显着进展之前,宇宙就会结束。 (基本上,当宇宙走到尽头时,你将处于 0.000000000000000... % 完成度。)
  • @AndreasRejbrand 哈哈哈,实际上这就是我想要弄清楚的......我的嵌套循环是否会在宇宙的有生之年完成。但它肯定会在某个时候结束。你能指出一个方程式,我可以用它来准确地告诉我需要多少秒吗?我正在使用大数据计算器,所以我认为它可以处理大量数字
  • 代码运行次数为1001^301。如果代码需要 t 秒完成,总运行时间将不小于 1001^301 t 秒。
  • @AndreasRejbrand 太好了!,谢谢...您应该将其发布为答案,以便我接受 :)

标签: loops math computer-science


【解决方案1】:

如果你有 M 个嵌套循环,每个循环都有 N 个步骤,那么最内层代码将运行的总次数是 NM。因此,如果这段代码需要 t 秒来执行,那么总的运行时间将不小于 NMt.

在您的情况下,N = 1001 和 M = 301。因此

Ñ EM> 中号 EM> SUP> = 1351006135283321356815039655729366684349803831988739053240801914465955329955010318785683390381893021480038259097571556568393033624125663039020474816807139123124687688667110651554536455554983313531622053666601142890485454586020409971220427023079449603217442510854172465669657551198374621035716253537483681789962979899381794117593366167602159102878741666110186140811771157661856975727227011774938173689257851684515033630838203428990519981303994460521486651131205651440789014004132287034501678194895276766533222238644463714676717122486815519675003623218747516074833762258750872602504763945523812443905022112877989765178585281722001229086777672022301235387486256207147702409003911671750616133700186863997717468027217550738860605995255072363983914048955786591110292838269781981812167453230775137941595147968127169264749956845265384891251656562329411331097495063637387550896404766837508698223985774995150301001。 P>

此外,如果我们假设最内层的代码非常快,例如 t = 1 µs,那么总运行时间将不小于 N Mt = 1.35... × 10897 s.

当宇宙走到尽头时,您的代码将几乎完全完成 0.0000000000000000000000000000%找到运行硬件所需的电力)。

【讨论】:

  • 哈哈哈希望它在我完成循环之前不会结束
  • @IbrahimD.:确实如此。在实践中,你不应该嵌套超过两个或三个循环。如果 N^M 大于约 10000000000,则没有希望。
  • @AndreasRejbrand 我用 N^M ten thousand times larger 完成了循环。但此时您谈论的是高度专业化的代码和大量内核或数月的计算。
猜你喜欢
  • 2015-05-03
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多