散列法的实验研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
散列法的实验研究
学生姓名: 学号:
学院:
专业: 信息管理与信息系统
题目: 散列法的实验研究
成绩
指导教师
2010年12月20日
1 设计目的
《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑
关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并
对算法的效率进行简
单的分析和讨论。进行数据结构课程设计要达到以下目的:
(1) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(2) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方
法和技能;
(3) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用
系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的
工作方法和作风。
2. 设计内容和要求
设计内容:
(1) 散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突
的方法也可以不同。两者是影响查询算法性能的关键因素。
(2) 程序实现几种典型的散列函数构造方法,并观察,不同的解决冲突方法对查询性能的影响。
设计要求:
(1) 符合课题要求,实现相应功能;
(2) 要求界面友好美观,操作方便易行;
(3) 注意程序的实用性、安全性;
3(本设计所采用的数据结构
本设计采用散列法,用直接定址法、数字分析法、平方取中法、折叠法、除留余数法五种构造函数及开放定址法(线性探测再散列、二次探测再散列)、链地址法三种解决冲突的方法对散列法进行实验研究。
直接定址法:将待处理数据x直接赋值给adr, adr为关键字存储在散列表内的位置
adr=x
数字分析法:提取用户所要求进行分析的数字的位数,将组成新的数字,然后按照直接
定址法对新数字进行存储
int adr,p2=1,q2=1,i;
int p3=p1,q3=q1; //p1为程序接收用户输入的待分析数字所在的位数
//q1为程序接收用户输入的待分析数字所在的位数
int num=2;
if(p1==1)
p3=x%10;
1
else
{
for(i=1;i { p2=p2*10; p3=x/p2; p3=p3%10; } } for(i=1;i { q2=q2*10; q3=x/q2; q3=q3%10; } adr=p3+10*q3; 平方取中法:将待处理数据平方,取平方后的百位、十位作为存储地址 x1=x*x; a=(x1/100)%10; b=(x1/10)%10; adr=a*10+b; 折叠法:本程序内将待处理数字从低位到高位每三位组成一个新数字,并将所有新数字求 和,产生的新数作为存储地址 if(x<1000) { a1=x; sum=a1; } else { 2 a1=x%1000; a2=x/1000; sum=a1+a2; } adr=sum; 除留余数法:将待处理数据除M=979所得余数作为数据的存储地址adr=x%M; 线性探测再散列: adr=(adr+d)%M d=1,2…… 二次线性探测再散列:adr=(adr+d)%M d=1*1,-1*1,2*2,-2*2…… int p=1,q=0,b=-1; p=b*(p+q)*(p+q); if(num%2==1) p=-p; else q++; num++; adr=(abs(x+p))%M; 链地址法:本程序采用二维数组P[60][60]代替链表对数据进行处理与存储,用二维数组的 行存储数据存储的地址,二维数字的列存储已经进行处理的数据 int j; for(j=0;j<60;j++) { if(P[adr][j]==0) { ha[adr].location=adr; ha[adr].key=x; P[adr][j]=x; } 开放定址法查找成功的平均查找长度: int i; 3 int s=0,n=0; for(i=0;i { if(ha[i].key!=0) { s=s+ha[i].count; n++; } } ASL=s*1.0/n 链地址法查找成功的平均查找长度: int p,q,s=0; for(p=0;p<60;p++) { for(q=0;q<60;q++) { if(array[p][q]!=0) s=s+(q+1); else break; } } ASL=s*1.0/n; 4(功能模块详细设计 4.1 详细设计思想 散列法中,散列函数构造方法多种多样,而且对于同种散列函数解决冲突的方法也各有不同。因此我们要关注不同构造方法结合不同解决冲突的方法对算法性能的影响,以此来判定在存储某类数据时,不同方法对查询性能。 本程序主要就直接定址法、数字分析法、平方取中法、折叠法、除留余数法五种构造函数及开放定址法(线性探测再散列、二次探测再散列)、链地址法三种解决冲突的方法对散列法进行实验研究。根据不同的待处理数据类型选择不同的构造函数及处理冲突的方法,由采用的不同的方法对其查找成功的平均查找长度进行计算,以此来比较不同算法的性能。 4