【问题标题】:How does partitioning step acts as a conquering step in quick sort?分区步骤如何作为快速排序的征服步骤?
【发布时间】:2015-12-09 19:15:44
【问题描述】:

递归关系的时间复杂度由下式给出: T(n) = aT(n/b) + f(n) 这里f(n) 是征服子问题的成本,即合并成本 所有子问题都是为了解决问题,但是在分区的情况下,我们围绕特定的枢轴点划分数组,所以在计算快速排序的时间复杂度时,为什么我们采用O(n) f(n)的时间。

这是如何成为征服的一步?

【问题讨论】:

  • 我不明白这个问题;您是否觉得在生成实际较小的实例之前重新排列输入令人困惑?
  • 不,我只是问 f(n) 被认为是合并子问题的解决方案以解决整个问题所花费的时间,因此它应该被视为成本克服分治算法的问题,但在快速排序的情况下,分区算法实际上是围绕一个枢轴对数组进行分区,那么它在哪里解决了整个问题?

标签: algorithm time-complexity theory


【解决方案1】:

不明白你所说的征服步骤是什么意思。

f(n) 实际上是递归函数中所做的任何事情的成本,发生在递归之前、之后或之间。

在快速排序的情况下,合并分区的解决方案的成本为0,因为在对枢轴的左右两侧进行排序后,您无需进行任何操作。全部成本都在生成分区,为此,您需要定位您选择的枢轴。这就是为什么快速排序被归类为分而治之的硬拆分易连接类型。

定位枢轴的成本是O(n),因为您必须从左到右和从右到左移动,在枢轴的错误一侧找到项目,然后交换它们,直到两个搜索(从左到从右到左)相互交叉。

希望这有助于您的理解,如果我完全误解了您的问题,我们深表歉意。

【讨论】:

  • 是的,我得到了你的解释,实际上我认为 f(n) 是使用分而治之策略解决问题的成本,所以我认为因为 aT(n/b) 是将整个问题划分为子问题,因此 f(n) 必须是合并所有解决方案以给出问题的一个解决方案的成本,现在我从您的解释中得到了 f(n) 的定义。
  • 但是我仍然对 T(n) 的定义感到困惑,这是使用分治策略解决问题所花费的时间,所以 T(n)= 将问题划分为子所花费的时间-问题+将所有子问题的解决方案合并到一个问题的解决方案所花费的时间,所以这个合并步骤实际上让我卡住了,这就是为什么我认为分区步骤是一个征服步骤
  • 您提供的 T(n) 函数是可用主定理 (en.wikipedia.org/wiki/Master_theorem) 求解的任何递归的通用形式。通过征服成本,我相信您的意思是解决分区的成本,这发生在 T(n/b) 内部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 2020-05-12
相关资源
最近更新 更多