【问题标题】:Divide and Conquer分而治之
【发布时间】:2013-11-09 15:14:15
【问题描述】:

一直在学习分而治之,我很难理解一个概念。如果我们有一个排序数组并想做一些任务......我们得到公式

T(n) = a (n/b) * O(n)

如果我们使用b = 2(二叉树),这意味着每个子数组又被分成两个子数组......我们得到

T(n) = 2 (n/2) * O(n) --> 并且由主规则 running time = O(n * logn)

现在如果我们使用b = 3 (tri-nary tree) ,这意味着每个子数组又被分成三个子数组,我们得到

T(n) = 3 (n/3) * O(n) --> 表示running time = O(n * logn)

问题:

如果我们进行更多拆分,运行时间应该更长吗?

为什么不管我的树有多大,我的运行时间都一样?

【问题讨论】:

  • 我想你的意思是a (n/b) + O(n)(加号,不是*)
  • 加号不是*是什么意思
  • 重复次数写得不好。我猜他们的正确预期版本是:T(n)=aT(n/b)+O(n)T(n)=2T(n/2)+O(n)T(n)=3T(n/3)+O(n)
  • 这个问题跑题了。它更适合cstheory.stackexchange.com

标签: math optimization computer-science mathematical-optimization divide-and-conquer


【解决方案1】:

这样想。你有一个长度 n 数组。在树的每个级别,您都细分该数组。但是不管怎么细分,总共还是有n元素。

在父级你做n 的工作。在每个孩子身上你都做n/X 工作,但你做X 次,所以还是n 工作。

【讨论】:

    【解决方案2】:

    这很简单。无论树的程度如何,下一级过程的总和都是相同的。如您所知,树的度数越大,子节点处的进程越小。并且下一级过程的总和是相同的。但它仅在空闲条件下有效。实际上,由于递归函数调用,多级树的运行时间比少级树的运行时间要慢。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 2012-03-04
      • 2011-05-22
      • 2014-10-20
      • 2014-12-12
      • 2015-01-25
      • 2013-02-02
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多