Big o 确定此示例的大o

Big o 确定此示例的大o,big-o,computer-science,Big O,Computer Science,所以前几天我在考试中得到了这个问题,回答错了,但我不知道我的“新”答案是否正确。我所有的同学也不能给我一个直接的答案,所以我在这里问你们 所以基本上问题是,“在不同的测试中,下一个表已经组成,算法的大O是什么?”。在本例中,表的左侧是元素的数量,右侧是处理所需的时间 所以我的新答案实际上是O(n),因为通过两倍于元素量的过程所需的时间大约是原来的两倍。但我想知道这是真的吗?我应该更具体地使用big-O符号吗?忽略时间上的微小差异可以吗?它不完全是时间的两倍吗?正如你所说的“O(n),因为通过两

所以前几天我在考试中得到了这个问题,回答错了,但我不知道我的“新”答案是否正确。我所有的同学也不能给我一个直接的答案,所以我在这里问你们

所以基本上问题是,“在不同的测试中,下一个表已经组成,算法的大O是什么?”。在本例中,表的左侧是元素的数量,右侧是处理所需的时间

所以我的新答案实际上是O(n),因为通过两倍于元素量的过程所需的时间大约是原来的两倍。但我想知道这是真的吗?我应该更具体地使用big-O符号吗?忽略时间上的微小差异可以吗?它不完全是时间的两倍吗?

正如你所说的“O(n),因为通过两倍数量的元素所需的时间大约是原来的两倍”,因为O(n)中的“n”是一个函数,它并不意味着在时间上完全是1对1的关系,它是O(n)如果速度是线性的,并且如果时间是(n*1/2+1)或(n*2)或(n+1),则可以是线性的。所以你现在的答案是正确的。

对于O(n),它不必精确地线性缩放。结果图大致是线性的这一事实有力地表明,我们确实在处理O(n)的复杂性


看看,这使得线性的本质非常明显

如果你真的除以连续项,数据会使它看起来像是当
n
加倍时,相应的运行时间会增加一个系数,这个系数徘徊在
2.2
附近。如果这不仅仅是一个偶然事件,而且表明了运行时的实际渐近行为,那么它实际上几乎是线性的,但不是完全线性的。也就是说,函数可能更像这样:

T(n) = 10 * 2.2 ^ (log_2(n/5000))
价值表:

n      T(n)
5000   10
10000  22
20000  48
40000  106
80000  234
160000 515
在这种情况下,一些快速代数表明

T(n) = 10 * 2.2 ^ (log_2(n/5000))
     = 10 * 2 ^ (log_2(2.2)log_2(n/5000))
     = 10 * (n/5000)^log_2(2.2)
     ~ 10 * (n/5000)^1.1375

也许这是一个更好的答案,也许更糟。对于任何有限样本,不可能说出渐近行为是什么,但是这个答案-O(n^log(2.2))-可能会更充分地利用所有可用的数据。

我不太确定,但我会将其计算为O(n^0.26)

他们喜欢这个东西:@GC_u啊,对不起,我找不到合适的位置来放置它。有没有办法把它转移到那里?当你进入现实世界时,你再也看不到Big-O了,除非你看Matt Helm的电影。