zoukankan      html  css  js  c++  java
  • Python中的Dict底层 | 字典类型删除数据为什么不直接删除?

    Python中的dict字典类型是通过散列表或者说hash表实现的
    如果出现hash碰撞,采用开放寻址法
    开放寻址法中,所有的元素都存放在散列表里,当产生哈希冲突时,通过一个探测函数计算出下一个候选位置,如果下一个获选位置还是有冲突,那么不断通过探测函数往下找,直到找个一个空槽来存放待插入元素。

    添加元素

    把key通过哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里

    查找元素

    使用哈希函数将key转换为对应的数组下标,并定位到数组的位置获取value。

    删除元素

    采用伪删除的方式,当删除一个元素的时候,不直接删除,而是标记为已删除
    不能直接删除的原因:如果存在a,b哈希碰撞的情况,把a直接删除了的话,下一次查询b的时候,散列到a的位置时,发现为空会直接返回b不在字典中,b就会永远也找不到;所以采用标记的方法,当b散列到a的位置时,发现被标记为已删除,就会根据探测函数寻找下一个位置,直到找到。ab就相当于一个探测链,如果a删除了,b就永远也找不到了。

  • 相关阅读:
    AtCoder agc023_f
    CodeForces 1328
    洛谷 P4437
    Spark读取txt文件跳过第一行
    斯特林数学习笔记。
    hackrank subsets
    题解 CF1004F 【Sonya and Bitwise OR】
    [NOI2020]美食家
    Educational Codeforces Round 94 题解
    Delphi 与 C/C++ 数据类型对照表
  • 原文地址:https://www.cnblogs.com/leerep/p/13543635.html
Copyright © 2011-2022 走看看