王争数据结构19笔记
1、一个工业级的散列表具有的特点:
1)支持快速的查询、插入、删除操作;
2)内存占用合理,不能浪费过多的内存空间;
3)性能稳定,极端情况下,散列表的性能也不会退化到无法接受的情况。
2、设计一个散列表主要的思路包括:
1)设计一个合适的散列函数
2)定义装载因子阈值,并且设计动态扩容策略
3)选择合适的散列冲突解决方法
3、为了解决一次性扩容耗时过多的问题,将扩容操作穿插在插入操作的过程中,分批完成。当装载因子达到阈值之后,只申请新空间,但并不将老的数据移到新散列表中。当有新数据要插入时,将新数据插入新散列表中,并且从老的散列表中拿出一个数据放入新散列表。
4、当数据量比较小,装载因子小的时候,适合采用开放寻址法。基于链表的散列冲突方案适合存储大对象、大数据量的散列表,比起开放寻址,它更加灵活,支持更多的优化策略,比如使用红黑树代替链表。
5、散列函数的设计上要尽量使散列后的值随机且均匀分布,尽可能的减少散列冲突。散列函数的设计也不能过于复杂,否则会影响散列表的性能。