【问题标题】:Can all Divide and Conquer algorithms utilize parallelism?所有分而治之的算法都可以利用并行性吗?
【发布时间】:2013-11-20 00:48:21
【问题描述】:

我正在学习算法课程,似乎可以利用并行处理来实现分治算法。总是这样吗?

【问题讨论】:

  • 任何算法都可以使用并行处理来实现。您真正想问的问题是它们是否应该。 IE:这样做是否有任何好处。

标签: algorithm parallel-processing divide-and-conquer


【解决方案1】:

可以,但不一定有效。

分而治之的算法最适合(更容易理解)任务级并行性。这些任务是递归的,递归任务可以解释为任务树层次结构。任务树层次结构可以被视为使用不同参数的函数的多次调用。一些函数调用将等待其他执行(即它的子项),如果异步执行或直接在同步执行中可用(blocking 调用将自动等待结果)。所有这些操作实际上在每个并行框架中都可用。

但并行任务之间的通信可能代价高昂,具体取决于参数数据大小。如果将您的问题分成更小的部分(通过网络执行多台计算机或在多核计算的进程之间)比执行这些部分花费更多的时间,那么您将不会获得性能提升。您实际上会失去性能。

使用允许任务层次结构的框架(例如 C/C++ 中的 OpenMP 任务或 Python 中的 SCOOP(更多可用)),将串行分治算法转换为其并行算法更容易。

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2021-07-09
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多