什么是Heap Sort的递归关系?

时间:2017-11-26 16:27:10

标签: algorithm sorting time-complexity heapsort

我需要使用Master's定理来计算Heap Sort的时间复杂度,但我不知道哪个是递归关系。我知道它的复杂性是O(n log n),因为它遍历了二叉树的n倍。但是我需要专门使用Master的定理,为此我需要递归关系。 Heap Sort的关系是什么?

1 个答案:

答案 0 :(得分:1)

让我们从堆积算法开始:

heap_sort(int Arr[])
{
    int heap_size = n;
    build_maxheap(Arr);

    heap_sort_recurse(Arr, heap_size);

}

heap_sort_recurse(int Arr[], heap_size)
{
    swap(Arr[1], Arr[n]);
    heap_size = heap_size - 1;
    heapify(Arr, 1, heap_size);
}

build_maxheap()函数具有O(n)的标准实现。

排序的重要部分是for循环,执行n次。 在里面我们有一个swap方法调用和heapify方法调用。 heapify方法是完整二叉树的标准遍历。因此,复杂性为O(log n)

T(n)= O(n)+ n * O(log n)      = O(n * log n)

Master定理对于解决许多分而治之算法的递归关系很有用。

现在,如果您对主定理的应用感兴趣。我们可以实现递归算法

T(n) = aT(n-b) + f(n)

where n > 1, a>0, b>0

在这种情况下,您可能会有一个递推方程式如下

T(n)= T(n-1)+ O(log n)

显然,这不能通过主定理直接解决。 有一个为Subtract-and-Conquer类型派生的修改公式。

link可能有用。

对于表格的重复,

checkout([$class: 'GitSCM', branches: [[name: '*/wip']],
    userRemoteConfigs: [[url: 'ssh://git@5.6.7.8:5999/my/repo.git',
    credentialsId: 'your-credentials-id']]])

如果f(n)为O(n k )且k> = 0,那么

  1. 如果a <1则T(n)= O(n k
  2. 如果a = 1则T(n)= O(n k + 1
  3. 如果a> 1,那么T(n)= O(n k * a n / b
  4. 应用此,

    我们有a = 1,b = 1,k = 0

    因此,第二种情况适用。因此,

    T(n)= O(n 0 + 1 * log n)      = O(n * log n)

    希望它有所帮助!

相关问题