散列表(has table、哈希表)

一. 散列表是什么

 是包含映射关系的一种数据结构,可以提高查找效率。

二. 散列函数

 1)必须是一致的。假设输入一个单词“banana”,映射的数字是1,那么以后每次输入banana都要映射到数字1,否则散列表就没用处了。

 2)应该把不同的输入映射到不同的输出。如果无论什么输入都映射输出数字1,那么就不是好的散列函数。理想的情况是,任何一个输入,都有独一无二的映射输出。

三. 冲突

 将不同的键映射到不同的位置,实际上没有这样的散列函数可以一步到位。这就会导致冲突,也就是不同的键,映射到了同一个位置。怎么办呢?办法很多,这里说一个:如果两个键映射到了同一个位置,那么就在这个位置建一个链表,依次存储键值对。当然,这也不是完美的办法:假设有一串字母a开头的单词,它们分别对应不同的数值,但他们映射的位置却都是一样的,那么结果就是在内存的一个固定位置上建立了一个很长的链表,这样的话查找起来仍然效率不高。所以,对于散列函数,要注意:

    1)理想的散列函数可以把键均匀的映射到散列表的不同位置。

  2)理想的散列函数会使得在一个位置建立起来的链表不会变得不可接受的长。

猜你喜欢

转载自www.cnblogs.com/codingcz/p/9291868.html