【发布时间】:2010-07-12 16:11:26
【问题描述】:
我在这里经常有人谈论 Big O,它衡量算法之间的对比
这是否测量时钟周期或空间要求。
如果人们想根据内存使用情况对比算法,他们会使用什么衡量标准
【问题讨论】:
-
这会是一个很好的 4 月 1 日笑话。
标签: algorithm complexity-theory big-o
我在这里经常有人谈论 Big O,它衡量算法之间的对比
这是否测量时钟周期或空间要求。
如果人们想根据内存使用情况对比算法,他们会使用什么衡量标准
【问题讨论】:
标签: algorithm complexity-theory big-o
如果有人说“这个算法在 O(n) 时间内运行”,他是在谈论速度。如果有人说“这个算法在 O(n) 空间中运行”,他就是在谈论内存。
如果他只是说“这个算法是 O(n)”,他通常是在谈论速度(尽管如果他在讨论内存时这么说,他可能是在谈论内存)。
如果你不确定某人在说哪一个,问他。
【讨论】:
简答:你有“太空中的大 O”和“时间中的大 O”。
长答案:Big O 只是一个符号,你可以在任何你想要的上下文中使用它。
【讨论】:
n 指的是什么?
Big O 只是一个可以用来描述任何函数的数学工具。通常人们用它来描述速度,但它也可以用来描述内存使用情况。
此外,当我们使用大 O 表示时间时,我们通常不会直接谈论时钟周期。相反,我们计算“基本操作”(隐含地假设需要固定数量的周期)。
【讨论】:
通常是操作次数,也就是速度。通常,算法在速度上的差异比在内存使用上的差异更大。但是,您会在适当的时候看到用于内存使用的 O() 表示法。
【讨论】:
Big O 实际上只是基于输入增长的复杂性增长的衡量标准。 两个 O(n) 的算法可能在完全不同的时间执行,但它们的增长与输入的增长呈线性关系。
【讨论】:
Big-O 可以用来描述任意两个量之间的关系。尽管它通常仅用于计算机科学,但该概念也可能适用于其他领域,例如物理学。例如,无论天线形状如何,为在一定距离处产生单位强度信号而必须投入给定尺寸天线的功率为 O(d^2)。如果天线的尺寸相对于距离较大,则所需的强度增加可能是线性的,甚至是次线性的,而不是二次的,但随着距离变大,二次项将占主导地位。
【讨论】:
Big O 和其他人用于衡量某物的增长。
当有人说某事物是O(N) 时,那事物的增长速度不会比线性速率快。如果某事物是Ω(N^2),那么该事物的增长速度不会低于二次速率。当某个东西是Θ(2^N) 时,它就会以指数速度增长。
那个东西可能是算法的时间要求。它也可以是空间,即算法的内存需求。它也可以是几乎任何东西,与空间和时间无关。
例如,一些大规模并行算法通常衡量它可以运行的处理器数量的可扩展性。一个特定的算法可以在O(N) 处理器上运行O(N^2) 时间。另一个算法可能在O(N) 时间在O(N^2) 处理器上运行。
【讨论】:
虽然通常算法会按时竞争,但我通常会假设任何 O 语句都是时间。但是,比较空间也是完全有效的。 O 可以用于任何测量——我们通常只使用速度,因为它通常是最重要的。
【讨论】: