并发世界的大O符号是否相关?

时间:2014-05-19 17:32:30

标签: algorithm complexity-theory time-complexity

在大多数流行语言中,例如C / C ++ / C#/ Erlang / Java,我们有线程/进程; GPGPU计算市场正在增长。如果算法需要N个与数据无关的步骤,那么我们得到的性能就不一样,因为算法需要所有步骤都相互跟随。所以我想知道大O符号在并发世界中是否有意义?如果它与分析算法性能无关?

您可以在分布式环境中拥有N个或更多处理器(未来的GPGPU /集群/ FPGA,您可以根据需要获得尽可能多的内核 - 并发世界,不限于并行内核的数量)

3 个答案:

答案 0 :(得分:6)

Big-O符号仍然相关。

你有一个恒定数量的处理器(假设),因此只能同时发生一定数量的事情,因此你只能通过常数因子加速算法,而big-O忽略常数因子。

因此,无论您是查看步骤总数,还是只考虑处理大多数步骤的处理器所采取的步骤数,我们最终都会得到完全相同的时间复杂度,这最终会给我们一个不错的想法与输入规模相关的时间增长率。

  

...未来您可以根据需要获得尽可能多的内核 - 并发世界,而不仅限于并行内核的数量。

如果我们甚至可以在非常大的输入上以秒为单位运行具有指数运行时间的算法的阶段,那么是的,big-O表示法和算法研究可能会变得不那么相关。

但是考虑到,例如,对于O(n!)算法,使用n = 1000(实际上相当小),它将需要4x10^2567个步骤的区域,比仅仅10^87 estimated number of atoms in the entire observable universe大约4x10^2480倍。简而言之,大O符号不太可能变得无关紧要。


即使假设处理器数量实际上是无限制的,我们仍然可以使用big-O表示法来指示处理器处理大多数步骤所采取的步骤(应该指示运行时间)。

如果我们愿意的话,我们也可以用它来表示使用的处理器数量。

最重要的是,大O符号表示函数的增长率 - 这个函数可以代表任何。仅仅因为我们通常使用它来表示算术计算的数量,步骤,比较或类似并不意味着这些是我们可以使用的唯一内容。

答案 1 :(得分:0)

Big-O是一个数学概念。它总是相关的,它在计算机存在之前是相关的,它现在是相关的,它总是相关的,它甚至与数百​​万光年之外的假想外星人相关(如果他们知道它)。 Big-O不仅仅是我们用来讨论运行时间如何缩放的东西,还有一个数学定义,它与函数有关。

但是有很多models of computation(不幸的是很多人忘记了,甚至忘记了他们正在使用的是一个模型)并且哪些使用有意义并不总是相同。

例如,如果您正在讨论并行算法的属性,假设您具有恒定数量的处理元素,则基本上忽略了算法的并行性质。因此,为了能够表达更多,常用的模型(但绝不是唯一的模型)是PRAM

实际上,实际上没有无限数量的处理元素是没有意义的。这是一个模型。重点是抽象现实。你也没有无限的记忆,这是图灵机的假设之一。

对于甚至远离现实的模型,请参阅hypercomputation

答案 2 :(得分:0)

多线程并使用gpu' s只使用并行化来加速算法。但是有些算法无法通过这种方式加速。

即使算法可以通过并行化加速,O(N log N)算法也会比O(N²)算法快得多。