zoukankan      html  css  js  c++  java
  • 堆排序建堆复杂度在特殊情况下的推导

      堆排序分为两个过程,一个建堆的过程,一个是从堆顶取数的过程。这里针对第一个过程,给出在堆的形式是完全满二叉树的情况下,建堆复杂度Ο(n)的简单推导。

      

      上图是一个完全满二叉树,假设一个完全满二叉树的节点数为n,树高为h(共h层),则满足h = log(n + 1)。由堆的构建过程可以知道,第一层(从下往上)进行的比较次数为0次,第二层为1次,。。。,第h层(最上一层)为h - 1次,而每一层对应的节点数分别为2^h, 2^(h - 1), ..., 2^0个,所以总计的比较次数为

      T(n) = 0 * 2^h + 1 * 2^(h - 1) + 2 * 2^(h - 2) + ... + (h - 1) * 2^0                                                                                                 式(1)

               2T(n) = 1 * 2^h + 2 * 2^(h - 1) + 3 * 2^(h - 2)... + (h - 1) * 2^1                                                                                                   式(2)

    式(2)减式(1)得

    T(n) = 2^h + 2^(h - 1) + 2^(h - 2)... + 2^1 - (h - 1)                                                                                                              式(3)

    所以

                       T(n) = 2^(h + 1) - h - 1 = 2n - log(n + 1) + 1 = O(n)

    推到错误,纯属正常。

     

  • 相关阅读:
    Android教程 -07 Activity的任务栈和启动模式
    ViewPager封装工具类: 轻松实现APP导航或APP中的广告栏
    hdu 5900 区间dp
    状压dp入门
    poj 3280
    hdu 4745 two Rabits
    食了智,过来水一发
    poj 2142 the Balance
    hdu 6188 Duizi and Shunzi
    hdu 6186 CS Course
  • 原文地址:https://www.cnblogs.com/liujinyao/p/4708306.html
Copyright © 2011-2022 走看看