这个问题需要一些设置。
http://igoro.com/archive/big-oh-in-the-parallel-world/
此链接中的“方法1”详述了一种符号,用于描述并行性对算法时间复杂度的影响。我真的很喜欢这种描述方法,但这是我找到的唯一地方。
我的问题如下:为什么这种表示法不经常使用?
方法描述本身实际上给出了一种解释:“要将两个100×100矩阵相乘,我们将需要一台具有10,000个处理器的机器”。这句话似乎表明,10,000个处理器对于任何人来说都是完全不合理的。
我的反驳:
https://en.wikipedia.org/wiki/Manycore_processor
目前世界上最大的超级计算机Taihu Light总共包含40960 * 256 = 10485760内核。我们并没有像太湖之光这样的超级计算机,但是随着云计算的不断普及,我认为没有理由为什么在不久的将来不会广泛使用10,000个核心处理器及以后的处理器。最重要的是,平均每个GPU已经具有1000个内核。它们比CPU内核更专业,但这并不重要。
由于这种表示法的例子太少了,因此我还将使用等效的描述来提供自己的例子,我称之为大笔记法。
假设我们有一棵完美平衡的树,分支因子为b。保存的所有节点中的一个包含布尔值false,最后一个包含布尔值true。我们要查找并返回此真实节点。
使用广度优先搜索,Big-O运行时查找真实节点将为O(| V | + | E |)== O(b ^ d),其中b为分支因子,d为树的深度。
但是,如果我们假设有无限多的处理单元,每个处理单元都具有有限的处理能力,那么大笔钱表示法如下:$ O(b ^ d-> d)。这说明在1个处理器上,该算法将花费O(b ^ d)时间,但是随着处理器数量的增加,时间复杂度接近d,即树的深度。这是因为在每个错误节点上,我们可以产生b个更多的过程来搜索b个子节点中的每个节点。由于我们拥有无限的核心,因此所有这些过程都可以并行工作。这就是为什么我称其为“大笔钱”。时间复杂度随着处理能力的提高而降低,而随着您在Amazon / Microsoft / Google / YourFavoriteCloudProvider上投入更多的资金,处理能力也会提高。
我将再次重申我的问题。为什么与此类似的符号没有得到更广泛的使用?谢谢!
答案 0 :(得分:1)
The complexity class NC处理可以在并行设置中有效解决的问题。据我所知,从事并行算法工作的人的确使用传统的 O(。)表示法,并使用诸如“ NC算法”之类的表达式,因此,当您阅读论文并看到如下句子时:>
“我们为SOMEPROBLEM给出了O(xxx)NC算法。”
您应该将其解释为:
“我们为SOMEPROBLEM提供了一种并行算法,可以使用O(yyy)处理器在O(xxx)时间内解决它。”
(其中xxx和yyy当然有所不同)。
我不记得看到过类似您的符号的东西,但是我不确定它会带来什么。复杂度类通常根据某个参数和/或该参数的增长度量进行划分(例如,我们可以使用 O(1)处理器或 O(log n)处理器或...),以便以一定的精度对问题进行分类,如果我正确地理解它,您的符号可能会缺少这种符号。