使用并行处理器时哪种算法最佳?

时间:2016-12-20 06:18:46

标签: algorithm divide-and-conquer

如果我的机器有多个处理器并试图解决一个大问题,哪种算法最适合解决这个问题?

动态编程,贪婪还是分而治之算法?

2 个答案:

答案 0 :(得分:1)

这是一个非常广泛的问题,许多事情将取决于您尝试解决的具体问题,但您正在寻找的是算法是否可以并行执行其步骤。只有当一步的结果不依赖于另一步的结果时才能这样做。

  • 我们在这里不能说贪婪算法。他们只被定义为采取本地最佳的下一步。
  • 划分和征服将问题分成不同的部分,每个部分都可以单独解决,所以这通常是并行运行的好选择。
  • 动态编程可以被看作是一种分而治之的,但是现在,你正在解决问题的一小部分,然后用它来解决更大的问题,等等。例如,背包问题通常用作动态编程的用例。您可以从一个小型背包开始解决问题,并从那里构建您的解决方案。这里的问题是每个解决方案都取决于较小问题的解决方案。除非可以在线程之间划分各个步骤,否则无法并行化。

所以一般来说,分而治之似乎是并行运行的最佳选择。

答案 1 :(得分:0)

动态编程使用数组,必须在线程之间进行同步,这些线程正在搜索各个解决方案。

贪婪是一种单线程。可以做多线程,但不是一个巨大的优势imo。无论如何,你可以用一个线程池来拍摄最好的5场比赛...这将是最容易实现的。

分而治之是一种递归。如果你要生成一个新线程仍然需要同步,但它可以清楚地利用多个处理器。我认为这将是实现多线程的第二种更简单的方法。

问题的本质,你需要解决它将决定你应该使用哪种编程方法,而不是处理器核心数。

请考虑在线程之间切换上下文的时间成本!