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

Class Java如何找到算法的复杂性类?,class,complexity-theory,Class,Complexity Theory,我有一个问题要找到一个算法的复杂度等级估计。问题给出了算法的记录时间。那么,我是不是只是根据计算的方式来平均时间? 对不起,我错过了一个部分。 好的,它记录了时间,比如N=100,算法=300,下一个N=200,算法=604,下一个N=400,算法=1196,下一个N=800,算法2395。所以,我要计算300/100和604/200,然后找到平均值。这就是我估计算法复杂度等级的方法吗?它是否也为算法提供输入,从而产生记录的时间?您可以根据输入大小与输出运行时间推断增长顺序 i、 e.输入=1,

我有一个问题要找到一个算法的复杂度等级估计。问题给出了算法的记录时间。那么,我是不是只是根据计算的方式来平均时间? 对不起,我错过了一个部分。
好的,它记录了时间,比如N=100,算法=300,下一个N=200,算法=604,下一个N=400,算法=1196,下一个N=800,算法2395。所以,我要计算300/100和604/200,然后找到平均值。这就是我估计算法复杂度等级的方法吗?

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

i、 e.输入=1,运行时间=10 输入=100,运行时间=100000

将显示为O(N^2)

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

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

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

这些计算时间的方法是如何相互关联的


算法是否总是花费相同的时间来处理一个项目,而不管有多少个项目,是否存在一个因素?也许时间会呈指数级增长?

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

看看当你的输入越来越大时,需要多少步骤。所以,如果你有一个排序算法,它用100个步骤对10个项目进行排序,用10000个步骤对100个项目进行排序,你可以说是用大O(N^2)排序

输入步骤

10100(等于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)


希望有帮助

试着绘制运行时间与N的对比图,看看你是否有什么见解。(例如,如果运行时间=f(N),f(N)是否大约等于log(N),或sqrt(N),或…?)

建议从标记和标题中删除“Java”,您会遇到一个关于算法复杂性的一般性问题,它不依赖于任何特定的语言。谢谢您的帮助!那么,一个例子,f(100)=20,f(200)=76,f(400)=325将是O(log2n)?f(100)=100,f(200)=119,f(400)=139将类似于常数时间O(1)?第一个例子看起来更像O(N^2),第二个更像O(logn)为什么第一个是O(N^2)方程对f(100)=20有什么意义???我理解我对下一个的错误。谢谢你的帮助:)假设你每秒走500步,那么对于n^2你有100*100/500=20。200*200/500=80. 400*400/500=320. 500是常数,是从大O符号中计算出来的。非常感谢!这真的为我解释了很多:)