qq_41701572 2018-09-02 03:14 采纳率: 18.2%
浏览 4548
已结题

算法问题:考察二分查找的平均成功查找长度和平均失败查找长度的关系,请看图

图片说明图片说明图片说明图片说明其中有一个不懂的地方是为什么Ctn-1失败情况x对应的查找长度为d,然后Ctn中成功情况x对应的查找长度就为d-2?如果可以的话能结合比较树模型讲解一下过解题程(这里的解题过程不太明白)

  • 写回答

1条回答 默认 最新

  • devmiao 2018-09-02 03:29
    关注

    看数据结构书的时候碰上的内容,我自己将它化成关于级数的题,然后自己算的过程,基本就是等比级数和等差级数的混合内容。
    满二叉树来分析折半查找的平均长度

    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.

    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?