Java如何找到算法的复杂性类?

时间:2009-10-10 22:32:00

标签: class complexity-theory

我有一个问题要找到算法的复杂性类估计。该问题给出了算法的记录时间。那么,我是否只根据计算时间来平均时间? 对不起,我错过了一部分。 好吧,所以它记录时间,如N = 100,算法= 300,接下来N = 200,算法= 604,接下来N = 400算法= 1196,接下来N = 800算法2395.所以,我算如300/100,并且604/200并找到平均值。这是我应该如何估计算法的复杂性类别?

4 个答案:

答案 0 :(得分:1)

尝试绘制运行时间与N的关系,看看你是否有任何见解。 (例如,如果运行时间= f(N),则f(N)约等于log(N),或sqrt(N),或......?)

答案 1 :(得分:0)

它是否也为您提供算法的输入,从而产生记录的时间?您可以根据输入大小与输出运行时间推断出增长顺序。

即。 input = 1,运行时间= 10 输入= 100,运行时间= 100000

似乎是O(N ^ 2)

即。 输入= 1且运行时间= 10,可能是O(cn),其中C = 10 当n = 1时,N ^ 2和N是相同的

输入= 10且运行时间= 100000,可能是O(cN ^ 2),其中C = 10 并且N = 100 * 100 = 10000,* 10 = 100000

答案 2 :(得分:0)

提示:计算算法处理单个项目所花费的时间。

这些计算时间如何相互关联?

算法是否总是花费相同的时间来处理一个项目,无论有多少项目,是否有一个因素?也许时间呈指数增长?

答案 3 :(得分:0)

我认为时间不会有助于弄清楚它的复杂性。即使在完全相同的任务上,时间也可能非常不同(取决于调度程序或其他因素。)

看看当你的输入变大时需要多少步骤。因此,如果你有一个排序算法,需要100个步骤来排序10个项目和10000个步骤来排序100个项目,你会说从大O(N ^ 2)排序,因为

输入步骤

10 100(等于10 * 10)

100 10000(等于100 * 100)

这不是平均值,而是寻找一个函数,将输入映射到步数,然后找到该函数的哪个部分增长最快(N ^ 2增长快于N,所以如果你的函数是N ^ 2 + N你把它归类为N ^ 2)。

至少那是我记得它的方式,但它已经很久了!! :)

编辑:既然你的问题还有更多细节,那就是我要做的事情,并考虑到上述情况。

不要考虑平均任何事情,只考虑f(100)= 300,f(200)= 604和f(400)= 1196。

并且不必确切,只是在球场。所以一个简单的线性函数(如f(x)= 3 * N),其中f(100)= 300,f(200)= 600,f(400)= 1200,这将描述你可以说的算法的复杂性算法的复杂度类是线性的或大的O(N)。

希望有所帮助!