首页 > 其他分享 >1.散列表

1.散列表

时间:2024-10-27 23:45:48浏览次数:2  
标签:列表 步长 键值 冲突 哈希 线性 查询

散列表/哈希表

特点:

  • 通过建立键 key 与值 value 之间的映射,实现O(1)时间复杂度的高效的元素查询

举例:

图解:

常用操作:

  • 初始化
  • 查询操作
  • 添加键值对
  • 删除键值对

哈希函数(hash function):

  • 作用:作用是将一个较大的输入空间映射到一个较小的输出空间
  • 索引位置(桶)计算: index = hash(key) % capacity

哈希冲突

  • 因为输入空间远大于输出空间,所以理论上一定存在冲突
  • 解决方式:
    • 链式地址
      • 原理:将所有发生冲突的键值对存储在同一个桶的同一链表中(redis hash、go map)
      • 当链表很长时,可以将链表转换为’AVL 树’或’红黑树’,以提高查询效率
    • 开放寻址
      • 原理:不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突
      • 具体方法:
        • 线性探测
          • 采用固定步长的线性搜索:
            • 插入时,若发现桶内已有元素,则从冲突位置向后线性遍历(步长通常为1),直至找到空桶,将元素插入其中
            • 查询时,若发现哈希冲突,则使用相同步长向后进行线性遍历,直到找到对应元素。如果遇到空桶,说明目标不在哈希表中
        • 平方探测
          • 采用探测次数的平方步长的搜索:
            • 与线性探测类似
        • 多次哈希
          • 使用多个哈希函数
            • 插入时,若出现冲突,则尝试更换哈希函数,直到找到空位
            • 查询时,若出现冲突,则尝试更换哈希函数,直到找到元素或者出现空位
    • 再哈希
      • 原理:新建一个更大的哈希表,使用新的哈希函数将原先键值对重新映射到新的地址

标签:列表,步长,键值,冲突,哈希,线性,查询
From: https://www.cnblogs.com/navyum/p/18509364

相关文章

  • Selenium测试form表单之下拉列表
    处理form表单中的下拉列表,需要用到一个Selenium工具类-Select一、Select工具类常用属性和方法方法/属性描述1select_by_value()根据值选择2select_by_index()根据索引选择3select_by_visible_text()根据文本选择4deselect_by_value根据值反选5de......
  • C# 列表 (6)
    创建与访问varlistP=newList<string>{"a","b","c"};Console.WriteLine("----foreach输出----");foreach(variteminlistP){Console.WriteLine($"hello,{item}&quo......
  • 散列表:为什么经常把散列表和链表放在一起使用?
    散列表:为什么经常把散列表和链表放在一起使用?在计算机科学中,散列表(哈希表)和链表是两种常见的数据结构。你可能会好奇,为什么它们经常被放在一起使用呢?让我们一起来深入探讨这个问题。一、散列表的特点散列表是一种根据关键码值(Keyvalue)而直接进行访问的数据结构。它通过......
  • 散列表:如何打造一个工业级水平的散列表?
    散列表:如何打造一个工业级水平的散列表?在编程中,散列表(哈希表)是一种非常强大的数据结构,它可以在接近常数时间内进行插入、删除和查找操作。但是,要打造一个工业级水平的散列表,需要考虑很多因素。本文将深入探讨如何实现一个可靠、高效的工业级散列表。一、散列表的基本概念......
  • 散列表:常见的散列冲突解决方法有哪些?
    在使用散列表(哈希表)时,由于不同的键可能会映射到相同的哈希值,就会产生散列冲突。常见的散列冲突解决方法有以下几种:一、开放寻址法(一)基本原理当发生冲突时,通过在散列表中寻找下一个空闲的位置来存储键值对。(二)具体方法线性探测:从发生冲突的位置开始,依次检查下一个位置,......
  • 散列表:哈希表的装载因子对散列冲突有什么影响?
    散列表:哈希表的装载因子对散列冲突有什么影响?哈希表的装载因子对散列冲突有着重要的影响。一、装载因子的定义装载因子是哈希表中已存储的元素个数与哈希表大小的比值。例如,如果一个哈希表中有10个元素,哈希表的大小为20,那么装载因子就是10/20=0.5。二、对散列冲突......
  • wpf 数据绑定 列表 ObservableCollection
    #wpf数据绑定列表ObservableCollectionPrismDryIocDemo\PrismDryIocDemo\App.xaml<Applicationx:Class="PrismDryIocDemo.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http......
  • Vue3用户关注与粉丝列表展示
    文章目录说明功能描述:代码说明该组件主要是通过一个小抽屉进行用户粉丝与关注列表的展示前提:这里用了elementPlus的组件库所以需要配置好elementPlus的组件库环境这里采用的是根据传入的用户名进行查询。也可以修改为根据传入的用户id进行查询功能描述:抽屉窗:使......
  • 如何把一个python列表(有很多个元素)变成一个excel表格的第一列?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【麦当】的粉丝问了一个关于Python如何把一个python列表(有很多个元素)变成一个excel表格的第一列的问题,这里拿出来给大家分享下,一起学习。二、解决过程这里给出【dcpeng】和【德善堂小儿推拿-瑜亮老师】大佬......
  • 【移动应用开发】界面设计(二)实现水果列表页面
    续上一篇博客【移动应用开发】界面设计(一)实现登录页面-CSDN博客目录一、采用ViewBinding实现一个RecyclerView1.1在app/build.gradle中添加recyclerview依赖,并打开viewBinding(1)在app/build.gradle中添加依赖(2)在app/build.gradle中打开viewBinding功能(3)点击同步Sync,同......