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)

    推到错误,纯属正常。

     

  • 相关阅读:
    树莓派也跑Docker和.NET Core
    使用iSCSI协议挂载网络磁盘,电脑瞬间扩大一个T的容量!
    Azure DevOps Server (TFS)免费吗?
    明确架构目标
    MMN实用架构过程概览
    设计恰如其分的架构
    对象的自治和行为的扩展与适配
    Message Chains与Fluent Interface
    如何减少代码的量
    《软件框架设计的艺术》书评
  • 原文地址:https://www.cnblogs.com/liujinyao/p/4708306.html
Copyright © 2011-2022 走看看