散列学习笔记(二)——排解冲突

1. 多槽位(multiple slots

(1)桶单元细分成若干槽位slot,存放(与同一单位)冲突的词条

      散列学习笔记(二)——排解冲突_第1张图片

一个长度为23的散列表,每一个桶都被分成了3个槽位,将24个词条插入其中。进行查找时,除了需要根据关键码确定对应的桶单元地址,还需在桶中遍历所有的槽位。

(2)

  • 只要槽位数目不多,依然可以保证O(1)的时间效率。
  • 槽位预留过多,空间浪费
  • 无论预留多少,极端情况下仍有可能不够

2. 独立链(Linked-list chaining/separate chaining)

(1).每个桶存放一个指针。冲突的词条,组织成列表。

    散列学习笔记(二)——排解冲突_第2张图片  散列学习笔记(二)——排解冲突_第3张图片     

(2)

优点:

  • 无需为每个桶预备多个槽位
  • 任意多次的冲突都可解决
  • 删除操作实现简单,统一

缺点:

  • 指针需要额外空间
  • 节点需要动态申请
  • 空间未必连续分布,系统缓存几乎失效

3. 开放定址法(open addressing~closed hashing)

  • 为每个桶都事先约定若干备用桶
  • 散列表所占用的空间在物理上始终是地址连续的一块
  • 它们构成一个查找链probing sequence试探队列/chain

    

4. 线性试探 

    散列学习笔记(二)——排解冲突_第4张图片

  • 在线性试探中,一旦发生冲突,转而试探当前位置的后继
  • 存在大量本不该发生的冲突
  • 试探位置间距太近

5. 懒惰删除

     散列学习笔记(二)——排解冲突_第5张图片

6. 平方试探

  • 适当加大试探间距
  • 以平方数为距离,确定下一试探桶单元
  • 当表的长度为素数时,为了使平方试探总是成功,装填因子需要少于50%

      

     散列学习笔记(二)——排解冲突_第6张图片

优点:

  • 数据聚集现象有所缓解
  • 查找链上,各桶间距线性递增。一旦冲突,可逃离是非之地

缺点:若涉及外存,I/O将激增。有空桶也不一定能试探出来。

 

7. 双向平方试探

散列学习笔记(二)——排解冲突_第7张图片

 

你可能感兴趣的:(Data,Structure)