Algorithm 在快速排序中,分区步骤是如何作为征服步骤的?

Algorithm 在快速排序中,分区步骤是如何作为征服步骤的?,algorithm,time-complexity,theory,Algorithm,Time Complexity,Theory,递归关系的时间复杂度由下式给出: T(n)=aT(n/b)+f(n)这里f(n)是克服子问题的成本,即合并成本 所有子问题都是为了解决问题,但在进行分区的情况下,我们是围绕一个特定的轴心点划分数组,因此,在计算快速排序的时间复杂度时,我们为什么选择O(n) f(n)的时间 这是一个怎样的征服步骤?我不明白你所说的征服步骤是什么意思 f(n)实际上是递归函数中所做的任何事情的成本,这些事情发生在递归之前、之后或之间 在快速排序的情况下,合并分区的解决方案的成本是0,因为在对轴的左右两侧进行排序之后

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


这是一个怎样的征服步骤?

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

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

在快速排序的情况下,合并分区的解决方案的成本是0,因为在对轴的左右两侧进行排序之后,您不需要执行任何操作。整个成本都在生成分区,要做到这一点,您需要定位所选的轴心。这就是为什么快速排序被归类为一种“分而治之”的硬拆分-轻松联接类型

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


希望这有助于你的理解,如果我完全误解了你的问题,请原谅。

我不理解这个问题;在生成实际较小的实例之前重新排列输入是否会让您感到困惑?不,我只是问f(n)被认为是合并子问题的解决方案以给出整个问题的解决方案所花费的时间,因此它应该被认为是分治算法克服问题的成本,但在快速排序的情况下,分割算法实际上围绕一个轴分割数组,所以它在哪里克服整个问题问题?是的,我得到了你的解释,实际上我认为f(n)是使用分治策略解决问题的成本,所以我认为,因为aT(n/b)是将整个问题分解为子问题的成本,所以f(n)必须是合并所有解决方案以给出问题的一个解决方案的成本,现在我从你的解释中得到了f(n)的定义。但我仍然被T(n)的定义搞糊涂了,T(n)是使用分治策略解决问题所需的时间,因此T(n)=将问题分解为子问题所需的时间+将所有子问题的解组合为一个问题所需的时间,所以这个结合的步骤实际上让我感到结巴,这就是为什么我认为分割步骤是一个征服的步骤。正如你所提供的T(n)函数,是任何可以用主定理()求解的递归的一般形式。通过征服成本,我相信您指的是解决分区的成本,这发生在T(n/b)中。