递归关系,分析算法

时间:2018-09-08 09:40:33

标签: algorithm sorting quicksort recurrence

好的,我很难完全理解递归关系。

例如,如果我在最坏的情况下使用Θ符号分析快速排序,请为数组输入未排序的正数;

当基本情况n <= 3时,我使用插入排序对小型数组进行排序。 时间:O(1)或O(n ^ 2)?

我使用线性搜索将枢轴设置为所有元素的中位数。 时间:Θ(n)

对枢轴进行左右分割并执行递归。 时间:我认为2 * T(n / 2)

重复会是: T(n)= O(1)+Θ(n)+ 2 * T(n / 2)那么?

某事告诉我,基本情况将花费O(n ^ 2)时间,因为如果输入足够小,那将是最坏的情况。 那会给我复发吗? T(n)= O(n ^ 2)+Θ(n)+ 2 * T(n / 2)?

1 个答案:

答案 0 :(得分:2)

  1. 当基本情况n <= 3时,我使用插入排序对小型数组进行排序。
    • 总是 O(1)
  2. 我使用线性搜索将枢轴设置为所有元素的中位数。
    • 您可能想进一步说明这一点,要找到作为枢轴的中位数不是进​​行线性搜索的简单任务。我有几种方法 快速选择算法(平均O(N))或ii)对子分区进行排序 O(NlogN)iii)“中位数中值算法” O(N)。
  3. 对枢轴进行左右分区并执行递归。
    • 2F(N / 2)+ N

将所有内容放在一起(假设枢轴始终是中位数,并且每次都用O(N)来找到枢轴):

Best_Case = Worst_Case(因为枢轴始终是中间值)

F(3) = F(2) = F(1) = 1

F(n) = 2F(N/2) + 2N 
= 2(2F(N/2^2) + 2(N/2)) + 2N 
= 2(2)F(N/2^2) + 2N + 2N
= 2(3)F(N/2^3) + 3(2)N
= 2(LogN)F(N/N) + (2N)LogN
= O(NlogN)