我知道算法的运行时间是用Big O或Big omega符号等表示的,但我仍然不能计算出代码以秒(或毫秒)为单位执行的时间。例如,n=10^6,我们做O(n),那么我怎么知道需要多长时间呢?我还理解,for循环中的其他语句也会影响运行时间,并且在不同的CPU上时间可能会有所不同。但通常在编码竞赛中,我们被给予一个特定的时间,比如说2-5秒,在这里我不能决定我的算法是否足够有效,或者是什么使我的代码变慢。谢谢!
发布于 2015-10-20 01:03:33
这不是大O符号的工作方式。它指的是当你添加“东西”时算法效率的缩放。
它不是绝对时间,而是相对时间。带有O(n)的100个项目所需的时间是10个项目的10倍。O(N^2)意味着你会期望100倍的差值。(10^2= 100,100^2= 10,000)
仅此而已。这是一种表达效率的方式,而不是计算运行时。您仍然需要知道一次“操作”需要多长时间,这取决于处理器/体系结构。
另请参阅:What is a plain English explanation of "Big O" notation?
“大O表示法是算法复杂性的相对表示。”
发布于 2015-10-20 01:06:01
O(n)实际上并不意味着测试时间。这更多的是对可伸缩性的测试。一些东西可能需要一万亿次操作,但它仍然是O(1),因为它恰好需要1万亿次操作,无论输入的大小如何。
测试跨规模时间的唯一方法是实际运行它,看看不同大小的输入会发生什么情况。
发布于 2015-10-20 01:13:41
O-notation的优点是它是独立于机器的,它实际上是了解一个算法与其他算法相比是否有效的最好指标。请注意,计算机每年都在变得更快,因此您现在得到的以秒为单位的具体速度度量将随着时间的推移而变化,但使用O-记数法将始终清楚地表明,在O(log )中解决问题比在O(n)中快得多。
但是仍然有许多工具可以测量程序的(近似)执行速度-时间。例如,在Linux中,您可以使用time
命令。然而,结果还取决于许多其他变量(包括物理变量;例如,CPU温度可能会降低程序的性能)。由于环境的噪声,不可能测量给定算法的精确时间度量(而且它仍然是无用的,因为它总是依赖于运行它的机器)。
https://stackoverflow.com/questions/33219962
复制相似问题