嘿,所以我有点难以掌握经验运行时分析。所以我有个问题:
假设我们有一个O(1)函数,在n=2000的情况下需要8s来执行。如果n=10000,您希望运行时是什么?
下面是我的思考过程,我认为是错误的:
如果T(n)是O(1),那么T(n)=c*O(1),其中c只是一个常数。求解c,我们得到c=T(n)/O(1)。既然我们知道T(2000)=8s,n=2000,我们可以把它插进去,求出c,c=(8s)/(2000),得到0.004。
现在我们对n=10000也要这样,在这种情况下T(10000)=c*O(1)
在这种情况下,我们可以插入之前找到的c,因为它只是一个常数,再插入10000,O(1)等于T(10000)=(0.004)*10000,等于40秒。我只是不确定我的思维过程是否正确。
最佳答案
正确的答案是,我们不能期待任何特定的时间。
说一个函数的运行时O(1)就是说有一个数C,使得该函数总是在不到C秒的时间内运行。如果函数在8s内运行一次,我们知道C至少是8。但可能是一百万。或者是一个隔膜。
O(1)告诉我们的是,无论n是什么,运行时间都是有限的。运行时间可以随着n的变化而上下变化,但总是受到C的限制。
相反,将其与运行时为O(n)的函数进行比较。这意味着有一个数字C,使得函数的运行时间总是小于C*n秒(除了允许有限数量的异常)。所以我们没有一个恒定的极限,我们有一个依赖于n的极限,这个函数可能会随着n的增长而花费越来越多的时间。
或许不会。O符号只告诉您函数运行时的限制。它不会告诉你实际的运行时间。如果我知道你昨天车里有一加仑汽油,你跑了30英里,我知道你的车每加仑至少能跑30英里。如果你今天有两加仑汽油,我知道你至少可以走60英里,但也许你可以走得更远,我不知道你到底能走多远。我知道你的旅行是有限制的,但我不知道它到底是什么,也不知道你会走多远。
关于c - c-经验运行时分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48070569/