Algorithm 从复杂度估计程序执行时间

Algorithm 从复杂度估计程序执行时间,algorithm,complexity-theory,performance,processing-efficiency,Algorithm,Complexity Theory,Performance,Processing Efficiency,我想知道,如果我对最坏情况下的时间复杂度有估计,我如何估计我的程序在我的机器上执行所需的时间? 例如:-如果我有一个程序,在最坏的情况下是O(n^2),并且n将n^2乘以你在最内层循环迭代中花费的时间,你就得到了一个大概的估计。因为大O复杂性忽略了线性系数和较小的项,仅考虑到算法的o复杂度,不可能估计其性能 事实上,对于任何特定的N,您无法预测两个给定算法中哪一个执行得更快 例如,O(N)并不总是比O(N*N)快,因为对于许多小的N值,需要100000000*N步的算法比需要N*N步的算法慢 这

我想知道,如果我对最坏情况下的时间复杂度有估计,我如何估计我的程序在我的机器上执行所需的时间?
例如:-如果我有一个程序,在最坏的情况下是O(n^2),并且n将n^2乘以你在最内层循环迭代中花费的时间,你就得到了一个大概的估计。

因为大O复杂性忽略了线性系数和较小的项,仅考虑到算法的o复杂度,不可能估计其性能

事实上,对于任何特定的N,您无法预测两个给定算法中哪一个执行得更快

例如,O(N)并不总是比O(N*N)快,因为对于许多小的N值,需要100000000*N步的算法比需要N*N步的算法慢

这些线性系数和渐近较小的项因平台而异,甚至在同一等价类的算法中也是如此(就大O度量而言)。三,


您试图使用大O表示法的问题并不是它设计用来解决的问题。

与其处理复杂性,不如看看
最坏情况下的执行时间(WCET)。这一领域的研究很可能与你正在寻找的内容相符


程序性能是一门实验科学。您将/将花费更多的时间为您的程序的性能设计一个准确的预测,而不是编写程序并对其计时。然后,一旦你有了准确的预测,你仍然需要编写程序并测试你的预测是否符合你的观察结果。最好先编写程序,然后测试它的性能。在编写程序之前(或者至少在知道要编写什么之前),不能对此进行评估。您首先需要至少一个数据点。这就像在选择要去的地方之前估计油箱中需要多少汽油一样。@HighPerformanceMark假设我已经证明了我的算法的正确性,现在我想知道它的效率有多高,如果没有,就想出一个更好的算法。我的意思是,渐近时间复杂性给了性能一个界限,对吗?我脑子里有一个算法,现在我想知道它的“性能”是以“秒”为单位的。实际上,许多编码问题都涉及“时间限制”(1秒、2秒等)和输入约束。我有一个算法,但不知道它的实际运行时间。这就是这个问题的动机。但这需要OP来编写代码,OP明确地希望在编写代码之前估算运行时间。@HighPerformanceMark您通常可以轻松估算在最内部循环中花费的时间。无论如何,对于N=100K的O(N^2),我不希望任何东西少于10分钟。你需要至少一个数据点,然后才能猜测线性系数是什么。是的,但这不是一个抽象的设置,OP可能对线性系数有一些概念。请不要告诉我,当N为1e5时,你必须编写一个O(N^2)算法,然后丢弃它,你有2秒钟的时间来处理数据。我想我已经意识到,大oh表示我的处理时间将随着输入大小的变化而变化。对于实际时间,我必须编写代码。如果它没有超过时间限制,这意味着它必须进一步优化…因此最好使用高效的数据结构和算法编写尽可能多的优化代码…对吗?没错。优化在很大程度上是基于测试的——遗憾的是,你可能正在使用一个低效的算法,这是你必须通过研究学会纠正的事情之一。我认为在编写算法之前,这不是一个好方法。