我经常听到人们谈论Big O,它可以将算法相互进行比较。
这是衡量时钟周期还是空间需求呢?
如果人们想根据内存使用量对算法进行对比,他们会使用什么指标呢?
我经常听到人们谈论Big O,它可以将算法相互进行比较。
这是衡量时钟周期还是空间需求呢?
如果人们想根据内存使用量对算法进行对比,他们会使用什么指标呢?
简短回答:你需要考虑时间复杂度和空间复杂度的“大O符号”。
详细回答:大O符号只是一种符号表示法,可以用于任何上下文中。
n
是指什么? - Pacerier大O符号是一种可以用来描述任何函数的数学工具。通常人们使用它来描述速度,但同样也可以用来描述内存使用。
此外,当我们使用大O符号来描述时间时,通常并不是直接讨论时钟周期。相反,我们计算“基本操作”(这些操作被隐含地假定需要花费恒定数量的周期)。
大O表示的是基于输入增长而复杂度增长的度量。两个时间复杂度都为O(n)的算法可能执行时间差异很大,但它们的增长与输入的增长成线性关系。
大O符号可用于描述任何两个量之间的关系。虽然它通常只用于计算机科学,但这个概念也可以适用于其他领域,比如物理学。例如,在给定大小的天线产生单位强度信号所需的功率量与距离的平方成正比,即O(d^2),而不管天线的形状如何。如果天线的大小相对于距离很大,所需的增强可能是线性或次线性的,而不是二次的,但随着距离的增加,二次项将占主导地位。
Big O等量级被用来衡量一些东西的增长。
当有人说某物是O(N)
时,它的增长速率不会超过线性。如果某物是Ω(N^2)
,那么它的增长速率不会低于二次方。当某物是Θ(2^N)
时,它的增长速率是指数级别。
那个东西可以是算法的时间需求、算法的空间,或者基本上和空间和时间都无关的任何事情。
例如,一些大规模并行算法通常通过可以运行在多少处理器上来衡量可伸缩性。一个特定的算法可能在O(N^2)
时间内在O(N)
处理器上运行。另一个算法可能在O(N)
的时间内在O(N^2)
处理器上运行。
通常情况下,算法竞争的是时间,因此我通常会假设任何O语句都是时间。然而,完全可以进行空间比较。O可用于任何度量 - 我们通常使用速度是因为它通常最重要。