北京师范大学数据结构教学资料 第章——集合与字典
* 应用开散列法处理冲突, 需要增设链接指针,似乎增加了存储开销。事实上, 由于闭散列法必须保持大量的空闲空间以确保搜索效率,如二次探查法要求装填因子?≤0.5,而表项所占空间又比指针大得多,所以使用开散列法反而比闭散列法节省存储空间。 散列表直接出计算表项存放地址,在关键码与存储位置之间直接建立了映象。 散列表分析 * 当选择的散列函数能够得到均匀的地址分布时, 在搜索过程中可以不做多次探查。 由于很难避免冲突, 增加了搜索时间。冲突的出现, 与散列函数选取(地址分布是否均匀), 处理冲突方法(是否产生堆积)有关。 在实际应用中使用关键码进行散列时, 如在用作关键码的许多标识符具有相同的前缀或后缀,或者是相同字符的不同排列的场合,不同的散列函数往往导致散列表具有不同的搜索性能。 下图给出一些实验结果。 * 搜索关键码时所需对桶的平均访问次数 * 可以看出,开散列法优于闭散列法;在散列函数中,用除留余数法作散列函数优于其他类型的散列函数,最差的是折叠法。 对散列表技术进行的实验评估表明, 它具有很好的平均性能, 优于一些传统的技术, 如平衡树。但散列表在最坏情况下性能很不好。如果对一 个有 n 个关键码的散列表执行一次搜索或插入操作,最坏情况下需要 O(n) 的时间。 Knuth对不同的冲突处理方法进行了概率分析。 * 若设 ? 是散列表的装填因子: Sn
原创力文档

文档评论(0)