Time complexity 大O符号和根据它测量时间
假设我们有一个O(2^n)阶的算法。此外,假设我们将输入大小n乘以2,那么现在我们有一个大小为2n的输入。时间是如何影响的?我们是不是把这个问题看成,原来的时间是2^n,现在变成了2^(2n),所以答案是新时间是前一时间的2的幂 大0不是告诉您实际运行时间,而是告诉您输入大小对运行时间的影响。如果将输入的大小增加一倍,复杂性仍然是O(2^n),n只是更大Time complexity 大O符号和根据它测量时间,time-complexity,big-o,Time Complexity,Big O,假设我们有一个O(2^n)阶的算法。此外,假设我们将输入大小n乘以2,那么现在我们有一个大小为2n的输入。时间是如何影响的?我们是不是把这个问题看成,原来的时间是2^n,现在变成了2^(2n),所以答案是新时间是前一时间的2的幂 大0不是告诉您实际运行时间,而是告诉您输入大小对运行时间的影响。如果将输入的大小增加一倍,复杂性仍然是O(2^n),n只是更大 number of elements(n) units of work 1 1
number of elements(n) units of work
1 1
2 4
3 8
4 16
5 32
... ...
10 1024
20 1048576
请参阅注释以了解更多解释,但是事实上,,这只是我提出的一个示例,用于帮助您掌握Big-O概念。这是而不是实际的算法含义
假设您有一个数组,arr=[1,2,3,4,5]
操作的一个示例是直接访问索引,例如O(1)
或arr[0]
arr[2]
操作的一个例子是一个循环,可以遍历所有数组,例如arr:中元素的O(n)
n
将是数组的大小。如果您的数组是原始数组的两倍大,n
也将是原始数组的两倍大。这就是变量的工作原理
有关补充信息,请参阅。这里对Big-O与执行时间的关系存在误解 考虑以下定义执行时间的公式:
f1(n)=2^n+5000n^2+12300
f2(n)=(500*2^n)+6
f3(n)=500n^2+25000n+456000
f4(n)=400000000
每个函数都是O(2^n);也就是说,对于任意M
和起始n0
值,它们都可以显示为小于M*2^n
。但是很明显,当大小从n1
增加到2*n1
时,您注意到的执行时间的变化在它们之间会有很大的差异(在f4(n)
的情况下根本不会如此)。不能使用Big-O分析来确定对执行时间的影响。它只定义了执行时间的上限(甚至不能保证是上限的最小形式)
以下是一些相关学术界:
该类别中有三个值得注意的边界函数:
O(f(n))
:Big-O-这定义了一个上限
Ω(f(n))
:大ω-这定义了一个下限
Θ(f(n))
:大θ-这定义了一个紧界
一个给定的时间函数f(n)
是Θ(g(n))
只有当它也是Ω(g(n))
和O(g(n))
(即上下界)
您正在处理Big-O,这是讨论的通常“入口点”;我们将完全忽略另外两个
考虑以下定义:
设f和g是定义在实数子集上的两个函数。有人写道:
f(x)=O(g(x))
当x趋于无穷大时
当且仅当存在一个正常数M,使得对于所有足够大的x值,f(x)的绝对值最多为M乘以g(x)的绝对值。也就是说,f(x)=O(g(x))当且仅当存在正实数M和实数x0,使得
| f(x)|x0
从这里开始,假设我们有f1(n)=2^n
。如果我们将其与f2(n)=2^(2n)=4^n
进行比较,那么f1(n)
和f2(n)
在大O术语中如何相互关联
这不是O(1)
,O(n)
,或O(2n)
“意思”。我在给我的答案添加上下文。既然他问了这个问题,人们可能会相信OP并没有理解大O符号的含义。@OlafSzmidt为什么这是一个笑话?如果有错误的陈述,请详细说明并教导/纠正我,而不是随意嘲讽。:)大O表示“不差于”,小O表示“不优于”,θ表示“不差于且不优于”。但请记住,时间复杂性大约是一个数量级。我知道大O表示最坏的情况,小O表示最好的情况。但是,在我的示例中,我明确地说,假设问题声明中有
,而O(…)**的意思是**
。如果我是对的,那就称之为类比,它对理解更抽象的概念有很大帮助。:)我的意思是运行时间是如何受到影响的,它是双倍还是三倍…?比双倍或三倍更糟糕,它可能以2倍的速度增长^n@EamonnMcEvoy值得注意的是,它也可能根本不会生长。Big-O不指定紧边界;只有函数是它的上界。例如:f(n)=100
将是O(2^n)
(它也是O(1)
)。谢谢你的回答。我的问题是关于O(2^n)阶的同一个算法(因此不是f1(n)和f2(n),而是只有f1(n)),我问如果该算法运行大小为2n的输入所需的时间,如果它在t秒内运行大小为n的输入,会发生什么。那么,新输入t^2所需的时间是多少?所需的时间无法通过Big-O分析来定义;O(2^n)
中的某些项可以有几个影响指数项之外的执行时间的其他项(甚至不能保证有指数项)。看看f4(n)
(即O(2^n)
);如果您从n=4
加倍到n=8
,那么f4(n)
会发生什么变化?更改为0。对f2(n)
进行相同的分析,变化量为120000。两个完全不同的答案,尽管都是'O(2^n);Big-O分析完全没有告诉你n的变化是如何影响执行时间的。不用担心,很高兴它有帮助!如果这个答案对你有帮助,我会告诉你的