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