zoukankan      html  css  js  c++  java
  • 二分查找的平均查找长度详解【转】

    来源:http://blog.csdn.net/turne/article/details/50488378

    看数据结构书的时候碰上的内容,我自己将它化成关于级数的题,然后自己算的过程,基本就是等比级数和等差级数的混合内容。
    满二叉树来分析折半查找的平均长度
     
    h=层高 n=节点数
    []为计算过程的式
     
    先算总查找次数
    1*1+2*2+3*4+4*8...(h-1)*2^(h-2)+h*2^(h-1)  ………………[1]
     
    [1]*2:
     
    1*2+2*4+3*8+4*16...(h-1)*2^(h-1)+h*2^h  ……………………[2]
     
    [2]-[1]:
    [1]*2-[1]=[3]:
    [1]=[3]:
     
    -1*1-1*2-1*4-1*8-1*16...-2^(h-1)+h*2^h  ……………………… [3]
     
    [4]+h*2^h=[3]…………………………………………………………………………[3.1]
     
    -1*1-1*2-1*4-1*8-1*16...-2^(h-1) ……………………………………… [4]
     
    [4]*2-[4]=[5]=[4]
     
    -2^h+1  …………………………………………………………………………………… [5]
     
    因为[5]=[4],所以把[5]代入[3.1]可以得到下面的结果
    [3]=[5]+h*2^h  =  -2^h+1+h*2^h=(h-1)*2^h+1
     
    由于 (n+1=2^h),所以有
     
    [3]=(n+1)log(n+1)-(n+1)+1
        =(n+1)log(n+1)-n
     
    最后,来求查找次数平均数
    [3] /n = ((n+1)log(n+1)-n)/n
             
    最终,平均查找长度约等于log(n+1)-1
     
    上面的所有对数log的底数皆为2.
     
     
  • 相关阅读:
    JavaScript-年月日转换12小时制
    Javascript-双色球
    Javascript-for循环案例-打印1-100之间所有的数字
    HDU4240_Route Redundancy
    HDU2883_kebab
    POJ3041_Asteroids
    HDU3829_Cat VS Dog
    BZOJ2806_Cheat
    HDU4641_K-string
    CF271D_Good Substrings
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/5829590.html
Copyright © 2011-2022 走看看