zoukankan      html  css  js  c++  java
  • 20172309_《程序设计与数据结构(下)》_课堂测试修改报告。

    20172309_《程序设计与数据结构(下)》_课堂测试修改报告。

    课程:《程序设计与数据结构》

    班级:1723

    姓名: 王志伟

    学号:20172309

    实验教师:王志强老师

    实验日期:2018年6月13日

    必修/选修: 必修

    实验内容:

    • 查找算法综合示例:

    实验过程及结果

    • 画出顺序查找的查找顺序表及成功查找平均长度
      • 顺序表:
    序列 11 78 10 1 3 2 4 21
    查找次数 1 2 3 4 5 6 7 8
    • 平均查找长度:
        ASL=(1+2+3+4+5+6+7+8)/8=4.5
    
    • 画出折半查找的判定树并计算出平均查找长度:

      • 首先注意:进行二分查找的必须是有序结构。 所以先排序: 1 2 3 4 10 11 21 78。
      • 其次注意取中间值时:mid = (star+end)/2 取值定义为不超过mid的最大整数。
      • 判定树:(注:第一行说明在第一次就查找到了。第二行说明在第二次找到了。以此类推···)
      • 平均查找长度:
      ASL=(1*1+2*2+3*4+4*1)/8=2.625 
      
    • 画出散列查找(线性探查法)的散列表和成功平均查找长度

      • 首先求出散列表的大小m:m一般取要排序数字的个数n的1.1~1.7倍,即1.1n<=m<=1.7n
      • 然后对每个元素分别求模:
    元素 11 78 10 1 3 2 4 21
    H(key)=key%m 0 1 10 1 3 2 4 10
    • 然后根据求得的mod,把元素插进去:
    序列 0 1 2 3 4 5 6 7 8 9 10
    查找次数 11 78 1 3 2 4 21 10
    • 这里需要注意的是:
    1. 当插入元素1时,求得的模等于1.但是所在的位置已经有元素了,所以我们运用的方法是:H(key)=(key+1)%m,然后判断此处所求的模的位置否有元素,如果有,则重复此操作;如果没有,元素将被放在这。
    2. 当被插入的位置是最后一个但此处位置已经有元素时(比如插入元素21时),此时10的位置后面没有位置!因此我们将元素从头开始放,直至有位置。我的理解是将这个散列表看成一个环形数组,然后后面没位置时,从头开始。
    • 平均查找长度:
    ASL=(1+1+1+2+1+3+2+8)/8=19/8=2.375
    

    (注:括号中的次数分别对应着原列表中元素的顺序。)

    • 用散列链表法储存元素:

      这个平均查找长度:
      ASL=(6*1 + 2*2)/8=5/4=1.25

    实验过程中出现的问题:

    • 问题一:第一种方案中,当在散列表中插入元素时,满了怎么办?

    • 解决方案:当时想到这个问题感觉是这种储存方式是错的, 现在想起来是自己太傻太天真了。然后下课后吃饭的时候,想了想,散列表m取1.1n~1.7n,也就是说m永远比元素个数n大,怎么会装不下呢?

    • 问题二:我当时是这么做的

      也就是说,我当时把散列表大小创建成12个,这为什么错了呢?因为当我们把散列表大小创建成12时,相当于我们求的模为13了(从零开始数的)。

    参考资料

  • 相关阅读:
    set, bag, list, map的语义
    ExtJs 自定义Vtype验证
    详解.NET中的动态编译技术
    IL汇编语言介绍(译)
    C# 文件操作相关
    邮件系统
    关于Nhibernate中的多数据库支持
    .NET中 用C#操纵IIS
    ExtJS日期格式
    完全详解使用Resource实现多语言的支持
  • 原文地址:https://www.cnblogs.com/dky-wzw/p/9823181.html
Copyright © 2011-2022 走看看