首页 > 其他分享 >20230407 11.1. 散列表

20230407 11.1. 散列表

时间:2023-06-20 11:36:49浏览次数:45  
标签:NameType Name 20230407 11.1 列表 查找 SymbolTable Table 散列

引入概念

已知的几种查找方法:

查找方法 时间复杂度
顺序查找 O(N)
二分查找(静态查找) \(O(log_2N)\)
二叉搜索树 O(h) h为二叉查找树的高度
平衡二叉树 \(O(log_2N)\)

【问题】如何快速搜索到需要的关键词?如果关键词不方便比较怎么办?

  • 查找的本质: 已知对象找位置。
    • 有序安排对象:全序、半序
    • 直接“算出”对象位置:散列
  • 散列查找法的两项基本工作:
    • 计算位置:构造散列函数确定关键词存储位置;
    • 解决冲突:应用某种策略解决多个关键词位置相同的问题
  • 时间复杂度几乎是常量:O(1) ,即查找时间与问题规模无关!

抽象类型表示

类型名称:符号表(SymbolTable)

数据对象集:符号表是“名字(Name)-属性(Attribute)”对的集合。

操作集:Table ∈ SymbolTable,Name ∈ NameType,Attr ∈ AttributeType

  1. SymbolTable InitializeTable( int TableSize ):

    创建一个长度为TableSize的符号表;

  2. Boolean IsIn( SymbolTable Table, NameType Name):

    查找特定的名字Name是否在符号表Table中;

  3. AttributeType Find( SymbolTable Table, NameType Name):

    获取Table中指定名字Name对应的属性;

  4. SymbolTable Modify(SymbolTable Table, NameType Name, AttributeType Attr):

    将Table中指定名字Name的属性修改为Attr;

  5. SymbolTable Insert(SymbolTable Table, NameType Name, AttributeType Attr):

    向Table中插入一个新名字Name及其属性Attr;

  6. SymbolTable Delete(SymbolTable Table, NameType Name):

    从Table中删除一个名字Name及其属性。

概念

“散列(Hashing)” 的基本思想是:

  1. 以关键字key为自变量,通过一个确定的函数 h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址。

  2. 可能不同的关键字会映射到同一个散列地址上, 即h(keyi) = h(keyj)(当keyi ≠keyj),称为“冲突(Collision)”。

    ----需要某种冲突解决策略

装填因子(Loading Factor):设散列表空间大小为m,填入表中元素个数是n,则称α= n / m为散列表的装填因子

Java 关联

  • HashMap
  • Hashtable
    • 实现了Map接口,是同步的

标签:NameType,Name,20230407,11.1,列表,查找,SymbolTable,Table,散列
From: https://www.cnblogs.com/huangwenjie/p/17490520.html

相关文章

  • 20230410 11.4. 散列表的性能分析
    平均查找长度(ASL)用来度量散列表查找效率:成功、不成功关键词的比较次数,取决于产生冲突的多少影响产生冲突多少有以下三个因素:散列函数是否均匀;处理冲突的方法;散列表的装填因子α开放地址法:散列表是一个数组,存储效率高,随机查找。散列表有“聚集”现象分离链法:散列......
  • 从零开始学Python第08课:常用数据结构之列表-1
    在开始本节课的内容之前,我们先给大家一个编程任务,将一颗色子掷6000次,统计每种点数出现的次数。这个任务对大家来说应该是非常简单的,我们可以用1到6均匀分布的随机数来模拟掷色子,然后用6个变量分别记录每个点数出现的次数,相信通过前面的学习,大家都能比较顺利的写出下面的代码。"""......
  • 1.redis常见数据类型-字符串String、列表List、集合Set、Hash哈希、Zset有序集合
    背景:这里说的数据类型是value的数据类型,key的类型都是字符串。命令不区分大小写,而key的值是区分大小写的 help@+数据类型会出现命令提示比如help@string,help@list常见命令:keys*查看当前库所有key(匹配:keys*1)existskey判断某个key是否存在typekey查看你的......
  • python二维列表(矩阵转置)
    1.方法一lst1=[[2,0,0,2],[2,1,2,1],[3,1,1,2],[0,1,0,1],]lst1[:]=[list(reversed(item))foriteminlst1]print(lst1)2.方法二lst2=[[2,0,0,2],[2,1,2,1],[3,1,1,2],[0,1,0,1],]lst2[:]=[list(item)foriteminzip(*l......
  • 83SR06B-E把流经端口的异常流量限制在一定的范围内。访问控制列表(ACL)技术
    83SR06B-E把流经端口的异常流量限制在一定的范围内。访问控制列表(ACL)技术83SR06B-E把流经端口的异常流量限制在一定的范围内。访问控制列表(ACL)技术  目前信息层网络采用的交换机安全技术主要包括以下几种。流量控制技术,把流经端口的异常流量限制在一定的范围内。访问控......
  • (四)列表、表格
    一、列表 二、表格 ......
  • 虚拟列表,我真的会了!
    原文链接:虚拟列表,我真的会了!虚拟列表的使用场景如果我想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好,主要有以下问题:页面等待时间极长,用户体验差CPU计算能力不够,滑动会卡顿GPU渲染能力不够,页面会跳屏RAM内存容量......
  • Vue实战(09)-列表渲染:让你的页面秒变爆款!
    1最基础的循环<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Vue中的列表渲染</title><scriptsrc="../vue.js"></script></head><body>......
  • Python:zip+dict将两个list列表对象转为dict字典对象
    将两个list列表对象转为dict字典对象代码示例keys=['one','two','three']values=[1,2,3]dct=dict(zip(keys,values))print(dct)#{'one':1,'two':2,'three':3}参考文章Python。将2个列表转换为一个字典对象[重复]......
  • wordpress插件:WP-UTF8-Excerpt使列表页只显示摘要(wordpress 6.2)
    一,安装WP-UTF8-Excerpt插件这个插件有点老,大家有更新及时的插件欢迎留言交流安装完成后,点击启用按钮二,查看效果说明:刘宏缔的架构森林—专注it技术的博客,网站:https://blog.imgtouch.com原文: https://blog.imgtouch.com/index.php/2023/06/18/wordpress-cha-jian-wputf......