据我所知,算法的运行时间以Big O或Big omega符号表示,等等,但我仍然无法确定代码执行的时间长度(或毫秒)。例如,n = 10 ^ 6,我们做O(n),那么我怎么知道需要多长时间?我也理解其他声明,例如for循环,也会影响运行时间,并且不同CPU上的时间可能不同。但通常在编码竞赛中,我们会给出一个特定的时间,例如2-5秒,在这里我无法确定我的算法是否足够高效或者是什么使我的代码变慢。谢谢!
答案 0 :(得分:1)
这不是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?
“Big-O表示法是算法复杂性的相对表示。”
答案 1 :(得分:0)
O(n)并不是真正用于测试时间的。它更像是对可扩展性的测试。有些东西可能需要一万亿次操作,但它仍然是O(1),因为无论输入的大小如何,它都需要1万亿次操作。
跨尺度测试时间的唯一方法是实际运行它,看看各种尺寸的输入会发生什么。
答案 2 :(得分:0)
O符号的优点在于它与机器无关,而且它实际上是了解算法是否与其他算法相比有效的最佳指标。请注意,计算机每年都会变得更快,所以现在得到的具体速度测量值会随着时间的推移而变化,但是使用O符号表明,解决O(log n)中的问题要快得多。为O(n)。
但是你仍然有很多工具可以测量程序的(近似)速度执行时间。例如,在Linux中,您有time
命令。然而,结果还将取决于许多其他变量(包括物理变量;例如,您的CPU温度可能会降低程序的性能)。由于环境的噪声,无法测量给定算法的精确时间度量(并且它仍然没用,因为它总是依赖于它所在的机器运行)。