ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数成为平均查找长度。

它的定义是这样的:

其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。

当然,有查找成功,就有查找不成功,即要查找元素不在查找表中。针对不同查找方式的查找成功与不成功,我接下来会说,这也是一我一开始有点乱的地方。

一个算法的ASL越大,说明时间性能差,反之,时间性能好,这也是显而易见的。

在顺序查找(Sequence Search)表中,查找方式为从头扫到尾,找到待查找元素即查找成功,若到尾部没有找到,说明查找失败。所以说,Ci(第i个元素的比较次数)在于这个元素在查找表中的位置,如第0号元素就需要比较一次,第一号元素比较2次......第n号元素要比较n+1次。所以Ci=i;所以

可以看出,顺序查找方法查找成功的平均 比较次数约为表长的一半。当待查找元素不在查找表中时,也就是扫描整个表都没有找到,即比较了n次,查找失败

折半查找(Binary Search),首先待查找表是有序表,这是折半查找的要求。在折半查找中,用二叉树描述查找过程,查找区间中间位置作为根,左子表为左子树,右子表为右子树,,因为这颗树也被成为判定树(decision tree)或比较树(Comparison tree)。查找方式为(找k),先与树根结点进行比较,若k小于根,则转向左子树继续比较,若k大于根,则转向右子树,递归进行上述过程,直到查找成功或查找失败。在n个元素的折半查找判定树中,由于关键字序列是用树构建的,所以查找路径实际为树中从根节点到被查结点的一条路径,因为比较次数刚好为该元素在树中的层数。所以

Pi为查找k的概率,level(Ki)为k对应内部结点的层次。而在这样的判定树中,会有n+!种查找失败的情况,因为将判定树构建为完全二叉树,又有n+1个外部结点(用Ei(0<=i<=n)表示),查找失败,即为从根结点到某个外部结点也没有找到,比较次数为该内部结点的结点数个数之和,所以

,qi表示查找属于Ei中关键字的概率,level(Ui)表示Ei对应外部结点的层次。所以,在一颗有n个结点判定树中,总数

,所以判定树高度为

的满二叉树,第i层上结点个数为

,查找该层上的结点需要进行i次比较,因此,在等概率情况下ASL为

例:给11个数据元素有序表(2,3,10,15,20,25,28,29,30,35,40)采用折半查找。则ASL成功和不成功分别是多少?首先画出判定树,

     查找成功时总会找到途中某个内部结点,所以成功时的平均查找长度为

 即25查找一次,成功,10,30要查找2次,成功,2,15,28,35要查找3次,成功,3,20,29,40要查找4次,成功。 而不成功的平均查找长度为

 ,为什么这么算呢,因为内部结点都能查找成功,而查找不成功的就是那些空的外部结点,所以到查询到2的左孩子,15的左孩子,28的左孩子,35的左孩子,3的左右孩子,20的左右孩子,29的左右孩子,40的左右孩子时,都是查找不成功的时候。如我要找1,比25小,转向左子树,比较一次,比10小,转左子树,2次,比2 小,转左子树,3次,此时2无左子树,所以失败。所以

 。

哈希表中的ASL   查找成功的平均查找长度是指查找到哈希表中已有关键字的平均探测次数。而查找不成功的平均查找长度是指在哈希表中找不到待查的元素,最后找到空位置元素的探测次数平均值。

例:散列表长度为13,地址空间为0~12,散列函数H(k) =K mod 13,对关键字序列{19,14,23,01,68,20,84,27,55,11,10,79}  所以线性探测结果为:

根据探测次数,

 当然成功的很好理解,12个元素,每个元素的探测次数之和除以12就行。而不成功的计算是这样的。散列表长度为13,根据定义,假设待查关键字不在散列表中,要一直找到空元素才算查找失败,如H[0]为空,与待查找元素不等,不成功,比较一次,H[1],此时H[1]的元素与原本放在H[1]的元素不等(假设不在散列表在之中,但也不是空的),继续向后比,与H[2]比也不等,继续向后,一直到H[12],也不等,继续向后时,回到H[0],为空,也不等,查找失败,总计比较13次,然后计算第二号元素,一样的比较,一直把每个位置都统计一遍,从而得出ASL不成功的.

以上就是对ASL的小小总结,为了加强自己的理解,也便于自己以后的回顾和修改,还有有一点很开心的是,最为新兰党,总算让我在2019年初等到了洗衣机和兰酱的休学旅行,很满意了。

Hash表的平均查找长度ASL计算方法

Hash表的“查找成功的ASL”和“查找不成功的ASL” ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数: H(Key) = (key x 3) MOD 7 ...

使用vs的查找功能,简单大概的统计vs中的代码行数

VS强大的查找功能,可以使用正则表达式来进行查找,这里统计代码行数的原理就是: 在所有指定文件中进行搜索,统计匹配的文本行数. 但是匹配的行需要满足:非注释.非空等特殊非代码行. 使用Ctrl+Shi ...

二维数组中的查找 - Java版 -简单二分查找 -&lt&semi;&lt&semi;剑指Offer&gt&semi;&gt&semi; -水题

如题 (总结) -认真读题, 还WA了一次, https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&am ...

vim 显示行号 查找的命令简单总结

1. linux vim 进行查找的方法 在command 模式下面 输入 /what-you-search 就可以搜索 注意  n 是向下查找 N 是向上查找 不想搜索了 输入 :set nol 就 ...

二叉堆的应用——查找长度为N数组中第M大数

看到这个题目首先想到是排序,那么时间复杂度自然就是O(NlgN).那么使用二叉堆如何解决呢? 对于下面一个数组,共有12个元素,我们的目标就是找出第5大元素——12 首先建立一个具有M个元素的最小堆, ...

数据结构---散列表查找&lpar;哈希表&rpar;概述和简单实现&lpar;Java&rpar;

散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...

&lbrack;Data Structure &amp&semi; Algorithm&rsqb; 七大查找算法

查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...

七大查找算法(附C语言代码实现)

来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...

索引查找(索引查找、分块查找) C语言实现

1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ...

随机推荐

GPUimage实时滤镜的实现

GPUIMAGE中GPUImageStillCamera可以调用系统相机,并实现实时滤镜,但是我没有找到相机全屏的方法,望知道的说一下 GPUImageStillCamera继承自GPUImageVi ...

MvvmLight ToolKit &period;Net4&period;5版本 CanExecute不能刷新界面bug

一 问题重现    1.在使用最新版本v5.1的MvvmLight中(其实这个问题很早就有了),发现CanExecute不能很好地工作了.一个简单的工程,只有MainWindow和MainWindow ...

&&num;9733&semi;RFC标准库&lowbar;目录链接

RFC(Request For Comments)是一个国际标准化的数据库,记录了从计算机到互联网的海量标准协议.它是一个免费公开的IT标准文件分享平台,其内容也在不断增长,与时俱进.它与ISO等组织 ...

Django web框架-----视图与网址的不同请求方式

在网页上做加减法 说明:mytestsite是django框架下的项目,quicktool是mytestsite项目中的应用 方式一:采用  /add/?a=1&b=4这种get方法进行 qu ...

使用min-device-pixel-ratio媒体功能实现真正的1像素border

关于设备像素比的知识,想必做过移动端开发的都有接触,这里就不介绍啦,万一有不懂的可以看张鑫旭大神的设备像素比devicePixelRatio简单介绍 由于设备像素比存在的原因,我们在处理设计图的一些边 ...

&lbrack;luogu1020&rsqb;&lbrack;导弹拦截&rsqb;

题目位置 https://www.luogu.org/problemnew/show/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的 ...

MongoDB统计文档&lpar;Document&rpar;的数组&lpar;Array&rpar;中的各个元素出现的次数

一,问题描述 [使用 unwind 操作符 “解包” Document 里面的Array中的每个元素,然后使用 group 分组统计,最后使用 sort 对分组结果排序] 从 images.json ...

Flume配置Failover Sink Processor

1 官网内容 2 看一张图一目了然 3 详细配置 source配置文件 #配置文件: a1.sources= r1 a1.sinks= k1 k2 a1.channels= c1 #负载平衡 a1.s ...

Spark实战记录

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PipelineExample winutils.exe java.lang.NullPointException~~~~~~~~~~~~~ ...

java基础-day30

第07天 MySQL数据库 今日内容介绍 u 多表关系实战练习 u 多表查询 u SQL语句的练习 第1章   多表关系实战练习 1.1  多表关系--实战1--省和市 1.1.1 需求分析 在数据库 ...

hash表的平均查找长度C语言,关于ASL(平均查找长度)的简单总结相关推荐

  1. c语言顺序查找算法,c语言实现排序和查找所有算法

    c语言版排序查找完成,带详细解释,一下看到爽,能直接运行看效果. /* Note:Your choice is C IDE */ #include "stdio.h" #inclu ...

  2. c语言怎么获取数组的长度,C语言怎么获取数组的长度

    c语言中,定义数组后可以用sizeof命令获得数组的长度[可容纳元素个数],通过传递数组名参数到子函数中,以获得数组长度是不可行的. c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元 ...

  3. c语言整形数组长度_c语言中如何求数组长度

    展开全部 1.c语言中,e5a48de588b63231313335323631343130323136353331333337613861定义数组后可以用sizeof命令获得数组的长度(可容纳元素个 ...

  4. php分块查找,索引查找(索引查找、分块查找) C语言实现

    1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ...

  5. Hash表查找成功和查找不成功的平均查找长度(附总结)

    Hash表的平均查找长度包括查找成功时的平均查找长度和查找失败时的平均查找长度. 查找成功时的平均查找长度=表中每个元素查找成功时的比较次数之和/表中元素个数: 查找不成功时的平均查找长度相当于在表中 ...

  6. 【hash表】hash表平均查找长度(ASL)

      hash 表在处理 collision 的时候有很多种方式,比如 线性探测(linear probing).二次探测(quadratic probing).开链法(seperate chaning ...

  7. 哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度

    哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度 了解ASL的公式 线性探测法求ASL 链地址法求ASL 了解ASL的公式 查找成功时:ASL =1n\frac{1}{n}n1​ ∑i=1 ...

  8. hash表建立,查找,详解

    散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录, ...

  9. 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找

    千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...

最新文章

  1. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA
  2. leetcode算法题--一周中的第几天
  3. ASP.NET Core分布式项目实战(客户端集成IdentityServer)--学习笔记
  4. python wget安装_Macbook系统环境安装wget的2个方法 - 传统包及Homebrew安装
  5. 在vSphere 6.x vSAN数据存储上使用Oracle RAC(2121181)
  6. 【Java从0到架构师】JS_jQuery_BootStrap
  7. linux下给qt4安装QSerialPort
  8. java图片透明_Java实现对图片透明化处理
  9. 职业技能鉴定 八大工种 广州紧缺工种 培训考证
  10. 10x5 10x5用计算机记忆,第一章科学计算器使用
  11. AWVS14.1.2下载安装教程(2021.3.6版本)
  12. C语言枚举类型和联合体
  13. 期刊检索级别简单介绍
  14. 无人车之美——论无人车辆系统的软件架构
  15. R、冗余分析(RDA)、ggplot2、置信椭圆
  16. 计算机用户接入最快的,行测真题_2013-2017年固定互联网宽带接入用户数的年增长速度最快的年份是...
  17. 网页文字无法复制的解决方法
  18. 04. Redis 环境搭建-单实例
  19. 学术圈很火的 超材料、超表面、超透镜:什么时候可以代替传统透镜?
  20. 字节面试:什么是责任链模式?

热门文章

  1. python等值面追踪_等值线的追踪算法(1)
  2. [Java版]selenium关键字驱动框架设计实战(二)
  3. 数学建模-插值算法(Matlab)
  4. sed 替换带有特殊字符/”的字符串
  5. Smart200 PLC实现Bool信号接通延时、关闭延时作用
  6. 51单片机ESP8266WIFI远程门禁密码锁可修改密码APP开锁查看密码
  7. Double 保留四位小数
  8. trino与ranger集成
  9. Motoman机器人离线编程——MotocomES介绍
  10. python编写一个投票计数器_用python编写计数器