算法+数据结构+Hash

1.最好的复杂度:
只有无冲突的hash table复杂度才是O(1),这是最好的情况。一般是O(c),c为哈希关键字冲突时查找的平均长度。故答案选A.

  1. 若使用H(K)=K%9作为散列函数,则散列地址为1的元素有()个
    散列函数
  2. 散列的基本思想是以结点的关键码作为自变量,通过散列函数将其映射到记录的存储地址。有时不同的关键码值经过同一散列函数计算后形成相同的存储地址,产生碰撞现象。由于处理碰撞的代价较大,应尽量避免。这就要求散列函数在作用于各记录关键码后的取值能同等均匀在存储空间上。
    4.散列解决冲突的方法

Hash 表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(表中记录数与表长之比)的大小成正比,即装填得越满越容易发生冲突, Ⅰ 错误。 Ⅱ 显然正确。采用合适的处理冲突的方式避免产生聚集现象,也将提高查找效率,例如用拉链法解决冲突时就不存在聚集现象,用线性探测法解决冲突时易引起聚集现象, Ⅲ 正确。
Ⅰ .增大装填(载)因子
Ⅱ .设计冲突(碰撞)少的散列函数
Ⅲ .处理冲突(碰撞)时避免产生聚集(堆积)现象

开放地址法是当发生冲突时,使用某种探查技术在散列表中形成一个探查序列,按照这个序列逐个单元查找,直到找到合适的位置。开放地址法有以下探查技术:
1.线性探查法:其实就是当发生冲突时,从该冲突位置逐个向后查找,类似于循环数组,直到找到合适的位置或者找遍整个表都未找到合适的位置。这个方法的缺点是易发生堆聚现象,堆聚就是存入哈希表的数据在表中连成一片。
2.线性补偿探测法
3.随机探测:将步长改为随机数,这样使不同的关键字具有不同的探测顺序,可以有效避免堆聚。
具体细节来自http://blog.csdn.net/lightty/article/details/11191971
线性探测法使得大量元素在相邻地址出现“聚集”现象,降低效率。主要是解决冲突算法选择不好,如果选择平方探测法,则可以避免堆积问题!

线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?
HashMap,TreeMap是线程不安全的。 HashTable 和 ConcurrentHashMap 都是线程安全的。同时Collection类还提供了synchronized()方法,使得线程安全。

你可能感兴趣的:(算法+数据结构+Hash)