算法设计与分析结课论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析

结课论文

Hash技术

学生姓名:***

学号:**********

专业:计算机科学与技术

年级:2009级

完成日期:2010年月日

指导教师:***

成绩:

Hash技术

摘要:随着科技日益发展,Hash函数的重要性越来越突出。本文介绍了几种构造Hash 的方法,例如直接定址法、数字分析法、平方取中法、折叠法、除留余数法等,在构造Hash函数时,应当注意两点问题:(1)函数值应在1至记录总数之间。(2)尽量避免冲突。还介绍了几种处理Hash算法冲突的方法。除此之外,阐明了Hash函数的优缺点和它在现实生活中的应用。

关键词:Hash函数,构造方法,应用,优缺点

目录

1.绪论

1.1 什么是算法

1.2 搜索算法

2.Hash函数

2.1 Hash函数的基本概念

2.2 Hash函数的基本思想与一般模型

2.3 Hash函数的构造

3. 处理冲突的方法

3.1 开放定址法

3.2 再哈希法

3.3 链地址法

3.4 建立一个公共溢出区

4. Hash算法的优劣分析

5. Hash函数的应用

5.1 完整性的验证

5.2 数字签名

5.3 认证协议

5.4 加密算法

6. 总结

1. 绪论

1.1 什么是算法

算法的概念在计算机科学与技术领域几乎无处不在,在各种计算机系统的实现中,算法的设计往往处于核心的位置。

1.2 搜索算法

搜索问题是计算机技术面对的基本课题之一,自20世纪70年代以来,计算机应用的主流逐渐从计算机密集型向着数据密集型转化,计算机存储和处理的数据量越来越大,结构越来越复杂,因此,对搜索算法的研究始终是人们研究的重要领域。

搜索算法与其他问题不同,它与数据结合的组织形式密切相关。在大多数情况下,搜索算法实际上是作为某种数据类型的运算或操作而不断的被调用的,搜索算法的优劣与数据结构密切相关。

2. Hash函数

2.1 Hash函数的基本概念

Hash函数是把任意长度的二进制串映射到特定长度的二进制串函数,是最基本的二进制函数之一。Hash函数也被称为“凑数函数”,但这个名称很少被采用,70年代之前也被称为散列函数,现在我们经常将其称之为Hash或译为哈什。

Hash技术是一种提供高速数据存储与检索方式的优秀技术,已有近50年的发展历史。其中二十世纪五六十年代因汇编与编译系统的需要,Hash技术受到普遍重视,70年代以来,计算机在数据管理与人工智能领域广泛应用,大型数据库系统的设计备受关注。由于Hash算法的期望搜索时间与数据集合的大小无关,所以在数据量很大时,其查询性能优于平衡树等搜索算法。

2.2 Hash算法的基本思想与一般模型

随着对Hash函数的不断探索,子啊上世纪九十年代Hash函数逐渐趋于成熟。Hash函数逐渐有了两个分支。一个分支就是针对大规模字符串词典,这就是我们常见的词典。另一个分支就是针对大规模稀疏整数集合,就是将一个大规模整数集合的所有

元素映射到一个较小集合。

Hash方法的基本思想是,首先产生从可能的关键字集合(又称全域)U=[0..N-1]到存储空间(Hash表)地址集合T=[0..m-1]的一个映射函数:h:U→[0..m-1]。于是,要存储或检索关键字为x∈U的数据项只需计算函数h(x),直接得到该数据项应在的地址。

然而对不同的关键字x,y∈U,h(x)=h(y)的情况可能出现,这种情形称为冲突(collision)。由于一般的|U|远远大于m,冲突难以避免,因此Hash技术研究的基本问题是:

(1)设计一个好的Hash函数,计算简单,而又使数据项分布均匀以减少冲突;

(2)设计解决冲突的策略和算法。

集合S⊆U为实际存于Hash表中的关键字组合。|S|=n≤N。α=n/m称为负载因子(load factor),α值是决定哈希算法性能的主要因素。其值小于1,且越小越浪费空间,越接近1性能越下降。

Hash算法的“散列”存储方式,使得它不能支持Minimum、Maximum、Successor、Predecessor这类的操作,而对于Search、Insert、Delete操作,不但可以支持而且有较高的性能。

从抽象数据类型(ADT)的观点来说,Hash算法用于实现字典(Dictionary)类型,实际关键字集合S为固定不变时,称为静态字典,只支持Search操作,S为可变时,即动态数据集,称为动态字典,动态字典支持搜索、插入和删除操作。

2.3 Hash函数的构造

Hash函数的设计一般应能兼顾计算简单和分布均匀,在大多数应用问题中,可能的关键字集合U往往远远大于地址空间的规模。例如以姓名字符串作为关键字,|U|=N是一个极大的值,而Hash表的长度m和实际关键字集合S(|S|=n)与N相比小得多。因

此,分布均匀的要求就是要对于h:U→(0…,m-1),S⊆U,|S|=n,使∑-

=-⋂

1 0

1|

)(

|

m

i

S

i

h尽量

小,其中|.|集合的势(求集合元素的个数),h1-(-i)为被h映射至地址i的关键字全体。

当且仅当∑-

=-⋂

1 0

1|

)(

|

m

i

S

i

h=n时达到最小值,意味着将无任何冲突产生。无冲突的Hash

函数称为完备Hash函数(Perfect Hash Function),简称PHF。

事实上,无冲突的要求是极难达到的。“生日悖论”指出,在23个人中,有两个人的生日在同一天的概率为0.51,即当|S|=n=23,m=365时,发生冲突的概率已经在50%以上。而当n=50时,发生冲突的概率已达0.97。在D.Knuth所举的实例中指出,当n=31,

相关文档
最新文档