Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这个时刻表中,我如何判断时间复杂度?_Java_Performance_Time - Fatal编程技术网

Java 在这个时刻表中,我如何判断时间复杂度?

Java 在这个时刻表中,我如何判断时间复杂度?,java,performance,time,Java,Performance,Time,我有一个问题要问你们大家 我有一个时间表,我试图计算出每个函数的时间复杂度。 此表的可能选项有O(n)、O(1)、O(n^2)、O(n lgn) 我说得对吗 a=O(n^2),不知道如何激发这个。但它似乎没有像c那样激烈的时刻,我怀疑当时一定是O(lg n lg)。 b=O(n),似乎有一个均匀的模式,每n=100,它随30ms增加。 c=O(lg n lg),不知道如何激励这个人。 d=O(1),无论n是什么,都需要相同的时间。 通过查看此时间表,我如何确定它的时间复杂度? 谢谢。我认为(c

我有一个问题要问你们大家

我有一个时间表,我试图计算出每个函数的时间复杂度。 此表的可能选项有O(n)、O(1)、O(n^2)、O(n lgn)

我说得对吗

a=O(n^2),不知道如何激发这个。但它似乎没有像c那样激烈的时刻,我怀疑当时一定是O(lg n lg)。

b=O(n),似乎有一个均匀的模式,每n=100,它随30ms增加。

c=O(lg n lg),不知道如何激励这个人。

d=O(1),无论n是什么,都需要相同的时间。

通过查看此时间表,我如何确定它的时间复杂度?
谢谢。

我认为(c)应该是O(n^2),因为从n=1000到500,值乘以4。这与O(n^2)增加相匹配。然而,对于(a),n=1000是n=500的两倍多一点。这表明(a)是O(nlgn)

在excel中输入表格,绘制图表并与此进行比较


a看起来像O(n lgn),b是O(n),co(n^2),

它有助于理解O(n)的实际含义。要使其可视化,请制作一个简单的折线图。把n放在X轴上,不管n是什么,然后把你测量的复杂度放在Y轴上。目标通常是“时间复杂度”,因此,CPU通过计算给定“n”值的输入集所花费的时间

如果你真的做了这个实验,对于低“n”,图表只是随意结果的一点点乱七八糟;运气是控制因素,因此,你不能做出正面或反面的判断(在那一次测试中,你的winamp切换歌曲,在这一次测试中,ArrayList开始时的容量为10意味着在11时你会看到一个突然的峰值,等等)

但是,继续。最终,你不知道这需要多长时间,但是,最终,一个形状开始形成。要么是因为你缩小得足够远(因为你的图形非常大,从n=1到n=100000),要么是因为算法的复杂性“占据了主导地位”,是控制因素

这就是O(n)所测量的:一旦这个图形看起来稳定了,它的形状会是什么样子?如果你说一个算法是
O(nlogn)
,你是说:图的右侧看起来很像图的右侧
y=x*log(x)

这也是为什么
O(n^2+n)
不是一件事的原因——如果你要绘制
y=x^2+x
,一旦你向右走得足够远,它看起来就会和
y=x^2
完全一样。考虑到问题的关键是“形状是什么”,一旦你走得足够远,任何对形状没有意义影响的因素都是无关紧要的

这为您提供了一个非常强大的工具来回答此类问题。拿出一支笔。拿出一些纸来。去画这个吧。认真地说,拿出一支笔来做:画一条线,在x轴上画10个记号,突出显示第一、第二、第五和第十个(对于n=100、n=200、n=500、n=1000)。然后,从~0-500绘制一个y轴,并在x=100,y=33处绘制一个点。同样在x=200,y=76,等等。尽你所能画出这条“趋势线”。然后拿出你的图形计算器,或者去wolfram alpha打印图形

如果形状匹配,瞧。你有你的答案

我给你一个提示:你似乎认为这4个选项中“最差的一个”是
O(n ln)
。也许你应该研究一下y=x^2和y=x*ln(x)的曲线图…

“我怎样才能知道给定这个时间表的时间复杂度?”-一种方法是绘制数据的曲线图,并将它们与复杂度函数的曲线图进行比较。提示:
O(n^2)
是这里四个选择中最差的,比
O(n log n)差得多
。对于生长潜力,n的幂超过n的对数,甚至超过n的对数的倍数,一周中的任何一天(;->)