Hash函数与冲突解决办法

Hash函数与冲突解决办法

1)应用方面

Hash 函数主要用在2个方面

1)构造 Hash map,或者 Hash set, 快速找到一个key 的对应 value

2)对文件进行签名,保证文本没有被修改过

2)散列函数安全性要求

一致性:相同的输入产生相同的输出。

随机性:消息摘要外观是随机的,以防被猜出源消息。

唯一性:几乎不可能找到两个消息产生相同的消息摘要。

单向性:即如果给出输出,则很难确定出输入消息。

Hash函数H一般满足以下几个基本要求:

(1)输入x可以为任意长度;输出数据串长度固定;

(2)正向计算容易,即给定任何x,容易算出H(x);反向计算困难,即给出一Hash值h,很难找出一特定输入x,使h=H(x);

(3)抗冲突性(抗碰撞性),包括两个含义,一是给出一消息x,找出一消息y使H(x)=H(y)是计算上不可行的(弱抗冲突),二是找出任意两条消息x、y,使H(x)=H(y)也是计算上不可行的(强抗冲突)。

http://www.gxu.edu.cn/college/hxhgxy/sec/COURSE/ch05/1_2.htm

3)Hash函数的选择

常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等

http://www.byvoid.com/blog/string-hash-compare/

Java的String s.hashCode()

CRC32, DES, SHA 是功能更强大的Hash,但计算时间也会加长

4) Hash冲突的解决

问题例子:Java 的hashCode() 是32位整数,要存的元素10万,不可能4G空间来存吧。用 mod 10万 后,冲突率更高了。要解决冲突

a) 必须保存元素的原始key的值

b)解决冲突有下面几种方法

开放地址法

链地址法

公共溢出区 (在公共溢出区再执行二分查找,可能得到比较高的效率)

http://www.360doc.com/content/09/1203/10/116188_10257794.shtml

http://hi.baidu.com/baixuejiyi1111/blog/item/0f019b1da4c69fe1ae513384.html

Hash函数与冲突解决办法

1)应用方面

Hash 函数主要用在2个方面

1)构造 Hash map,或者 Hash set, 快速找到一个key 的对应 value

2)对文件进行签名,保证文本没有被修改过

2)散列函数安全性要求

一致性:相同的输入产生相同的输出。

随机性:消息摘要外观是随机的,以防被猜出源消息。

唯一性:几乎不可能找到两个消息产生相同的消息摘要。

单向性:即如果给出输出,则很难确定出输入消息。

Hash函数H一般满足以下几个基本要求:

(1)输入x可以为任意长度;输出数据串长度固定;

(2)正向计算容易,即给定任何x,容易算出H(x);反向计算困难,即给出一Hash值h,很难找出一特定输入x,使h=H(x);

(3)抗冲突性(抗碰撞性),包括两个含义,一是给出一消息x,找出一消息y使H(x)=H(y)是计算上不可行的(弱抗冲突),二是找出任意两条消息x、y,使H(x)=H(y)也是计算上不可行的(强抗冲突)。

http://www.gxu.edu.cn/college/hxhgxy/sec/COURSE/ch05/1_2.htm

3)Hash函数的选择

常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等

http://www.byvoid.com/blog/string-hash-compare/

Java的String s.hashCode()

CRC32, DES, SHA 是功能更强大的Hash,但计算时间也会加长

4) Hash冲突的解决

问题例子:Java 的hashCode() 是32位整数,要存的元素10万,不可能4G空间来存吧。用 mod 10万 后,冲突率更高了。要解决冲突

a) 必须保存元素的原始key的值

b)解决冲突有下面几种方法

开放地址法

链地址法

公共溢出区 (在公共溢出区再执行二分查找,可能得到比较高的效率)

http://www.360doc.com/content/09/1203/10/116188_10257794.shtml

http://hi.baidu.com/baixuejiyi1111/blog/item/0f019b1da4c69fe1ae513384.html


相关内容

  • 模拟退火算法
  • 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解. 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解.如图1所示:假设C ...

  • 简单的C语言编译器
  • 中国好资料 一个简单的C 语言编译器 一.小组成员 朱嘉俊(3991102161) 王筱(3991102168) 朱杭(3991102162) 朱林(3991102094)计算机996计算机996计算机996计算机994 二.运行方式 在DOS 环境下运行: Cminus.exe -h 三.概述 经 ...

  • 树的四种分类
  • Searchtrees:实例--二叉搜索树 什么是二叉搜索树 二叉搜索树(BinarySearchTree)是一棵有序的二叉树,所以我们也可以称它为二叉排序树(不知道二叉树的童鞋,先看看二叉树:传送门). 具有以下性质的二叉树我们称之为二叉搜索树:若它的左子树不为空,那么左子树上的所有值均小于它的根 ...

  • 密码学与现代密码学研究_任伟
  • doi:10.3969/j.issn.1671-1122.2011.08.002 任伟 (中国地质大学(武汉)计算机学院,湖北武汉 430074) 文章对理论密码学体系的建立.密码学中的基本原语以及相互间构造的关联.密码学中的常摘 要: 用范式.可证明安全理论的概念和基本思路(如归约)进行总结和分析 ...

  • 验证性实验五
  • 验证性实验五 查找与排序 实验课程名:数据结构 专业班级: 学号: 姓名: 实验时间: 实验地点: K4-207 指导教师: 一.实验目的 1.掌握查找的不同方法,并能用高级语言实现查找算法. 2.熟练掌握顺序表的查找方法和有序顺序表的折半查找算法以及静态查找树的构造方法和查找算法. 3.掌握二叉排 ...

  • 大数据排序
  • 本文将向您讲述诸多数据处理面试题以及方法的总结. 第一部分.十道海量数据处理面试题 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计. ...

  • 现代密码学小论文
  • 目录 现代密码学的认识与应用............................................................................................ 1 一.密码学的发展历程............................... ...

  • 大数据量的整理方法
  • 大数据量,海量数据 处理方法总结 来源: 葛林华的日志 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到. 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法 ...

  • 你想知道的区块链:技术演进史.到底是什么.运作原理.5大关键技术
  • 一.区块链技术演进史; 区块链源自比特币,不过在这之前,已有多项跨领域技术,皆是构成区块链的关键技术;而现在的区块链技术与应用,也已经远超过比特币区块链. 要追溯区块链(Blockchain)是怎么来的,不外乎先想到比特币(Bitcoin),比特币是第一个采用区块链技术打造出的P2P电子货币系统应用 ...