• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
_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)

推到错误,纯属正常。

 

posted on 2015-08-06 16:26  _Java小菜盘  阅读(617)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3