跳表
链表加多级索引的结构就是跳表
跳表中快速的插入、删除、查询任意数据的时间复杂度是O(logn);跳表的空间复杂度是O(n)
散列表
-
散列表英文叫hash table,就是哈希表或者hash表。
-
散列表用的事数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一中扩展,由数组演化而来。可以说,如果没有数组就没有散列表。
-
散列表中有键、散列函数、散列值
散列函数,就是一个函数,它可以定义成hash(key),其中可以表示元素的键值,hash(key)的值表示经过散列函数计算得到的散列值。散列函数设计的基本要求:
-
散列函数计算得到的散列值是一个非负整数;
-
如果key1=key2,那么hash(key1)==hash(key2);
-
如果key1 ≠ key2,那么hash(key1) ≠ hash(key2)
散列函数的第三点很难解决,即使经典的md5等也很难解决,一般采用两种方法:
1、开放寻址法
开放寻址冲突解决方法,除了线性探测方法之外,还有另外两种比较经典的探测方法,二次探测和双重散列
不管采用哪种探测方法,当散列表中空闲位置不多的时候,散列冲突的概率就会大大提高。为了尽可能保证散列的操作效率,我们会尽可能保证散列表中有一定比例的空闲槽位,用装载因子表示空位的多少。<