实验5 哈希表实验报告

时间:2024.4.14

哈希表

一、实验目的

学会哈希函数的构造方法,处理冲突的机制以及哈希表的查找。

二、实验内容

说明以下概念

1、哈希函数

在一般情况下,需在关键字与记录在表中的存储位置之间建立一个函数关系,以 f(key) 作为关键字为 key 的记录在表中的位置,通常称这个函数 f(key) 为哈希函数。

1)   哈希函数是一个映象,即:

 将关键字的集合映射到某个地址集合上, 它的设置很灵活,只要这个地址集合的大小不超出允许范围即可;

2)  由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即: key1¹ key2,而  f(key1) = f(key2)。

2、哈希表

根据设定的哈希函数f(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为哈希表,这一映像过程称为哈希造表或散列,所得存储位置称哈希地址或散列地址。

3、冲突及处理

1)冲突:对不同的关键字可能得到同意哈希地址,即key1¹ key2,而  f(key1) = f(key2),这种现象称冲突(collision)。

2)处理方法:开放地址法。

         4、哈希表的查找分析

从查找过程得知,哈希表查找的平均查找长度实际上并不等于零。

 决定哈希表查找的ASL的因素:

1)  选用的哈希函数;

2)  选用的处理冲突的方法;

3)  哈希表饱和的程度,装载因子 α=n/m 值的大小(n—记录数,m—表的长度)

一般情况下,可以认为选用的哈希函数是“均匀”的,则在讨论ASL时,可以不考虑它的因素。因此,哈希表的ASL是处理冲突方法和装载因子的函数。

可以证明:

查找成功时有下列结果:

线性探测再散列

 

随机探测再散列

 

从以上结果可见

    哈希表的平均查找长度是a的函数,而不是n的函数。这说明,用哈希表构造查找表时,可以选择一个适当的装填因子a,使得平均查找长度限定在某个范围内。

5、哈希函数C语言代码

/*计算哈希地址,插入哈希表*/

int InsertHash(HashTable *H,int e,int d[]){

    int k,i=1;

    k=e%P;

    while(H->data[k].flag==TRUE||k<0){

        k=(e%P+d[i])%MAXSIZE;i++;

        if(i>=15)

            return ERROR;

    }

    H->data[k].key=e;

    H->data[k].flag=TRUE;

    H->count++;

    return OK;

}

/*构造哈希表*/

int CreateHash(HashTable *H,int ds[],int len,int d[]){

    int i;

    for(i=0;i<len;i++){

        if(SearchHash(H,ds[i],d)!=-1)

            return DUPLICATE;

        InsertHash(H,ds[i],d);

        if(H->count>=MAXSIZE)

            return ERROR;

    }

    return OK;

}

/*初始化哈希表*/

void InitHash(HashTable *H){

    int i;

    for(i=0;i<MAXSIZE;i++){

        H->data[i].key=0;

        H->data[i].flag=FALSE;

    }

}

/*在哈希表中查找*/

int SearchHash(HashTable *H, int e,int d[]){

    int k,i=1;

    k=e%P;

    while(H->data[k].key!=e){

        k=(e%P+d[i])%MAXSIZE;i++;

        if(i>=15)

            return -1;

    }

    return k;

}

运行结果:


第二篇:C#实验5实验报告


安徽机电职业技术学院实验报告

一、实验目的

1、进一步掌握类和对象的基本概念,掌握类字段和属性的使用;

2、掌握类的索引器的用途和使用;

3、了解类的静态成员用其作用;

4、掌握使用类来构造应用程序。

二、实验内容

使用Visual Studio .NET 2005,完成以下程序:

程序1、完成“使用索引器”的课堂示例(CSharp示例\第5课\Country);

程序2、“使用类的静态成员”的课堂练习(CSharp示例\第5课\Static);

程序3、使用贷款类完成“贷款计算器” (CSharp示例\第5课\Loan);

三、实验步骤

1、将服务器上“面向对象”课件的文件夹中的“Csharp示例\第5课\ Country”文件夹复制到本地磁盘上。打开其中的“Country.sln

”,完成其中的2个任务。将这两个任务的代码写在下面。

// TODO 1: 完成下面的索引器,该索引器可以返回peoples数组中index下标的人口数量

public double this[int index]

        {

            get

            {

                return this.peoples[index];

            }

// TODO 2: 书写第2个索引器,该索引器接收一个字符串格式的国家名称,可以返回对应的peoples数组中的国家人口数量

public class CountryPeoples

    {

        private string[] country = { "中国", "美国", "法国", "日本", "韩国", "印度" };

        private double[] peoples = { 1.306e+10, 2.5e+9, 6.09e+8, 1.274e+9, 4.829e+8, 1.027e+10 };

   

        public double this[string index]

        {

            get

{

    int i=0;

    foreach (string c in country )

{

    if ( c ==index ) break;

    i++;

}

    if (i>=peoples.Length) return 2;

    else  return peoples[i];

}

            }

        }

    }

  CountryPeoples c1 = new CountryPeoples();

            Output("韩国的人口数量是:" + c1["韩国"]);

            Output("法国的人口数量是:" + c1["法国"]);

            Output("美国的人口数量是:" + c1["美国"]);

            Output("日本的人口数量是:" + c1["日本"]);

            Output("印度的人口数量是:" + c1["印度"]);

2、将服务器上“面向对象”课件的文件夹中的“Csharp示例\第5课\Static”文件夹复制到本地磁盘上。打开其中的“StaticExample.sln”,完成其中的3个任务。

// TODO 1: 添加一个公共的静态的整型成员numberOfAntelopes

public class NumberOfAntelopes

        {

            private static int numberofantelopes = 0;

// TODO 2: 将numberOfAntelopes成员变量值加1

numberOfAntelopes++;

// TODO 3: 显示已经创建的羚羊(Antelope)的数量

Output("羚羊的数量: " + Antelope.numberOfAntelopes);

// TODO 4: 如果可能,将TODO 1中的numberOfAntelopes设成私有的,

// 然后通过公共的属性或方法对外公开。并在TODO 3中调用这个属性或方法

public static int numberOfAntelopes = 1;

3、将服务器上“面向对象”课件的文件夹中的“Csharp示例\第5课\MyLoan”文件夹复制到本地磁盘上。打开其中的“MyLoan.sln”,设计Form1窗体如下图所示:

并在“计算”按钮的Click事件中,实例化Loan类的对象来完成贷款计算器的功能。

// “计算”按钮Click事件中的代码

  decimal a;

            double b;

            int c;

            a = x.Value;

            b = (double)y.Value;

            c = (int)z.Value;

            Loan l = new Loan (a,b,c);

            string output = String.Empty;

            output += String.Format("本金:{0:C}\n",l.Principal);

            output += String.Format("月数: {0}\n",l.Months);

            output += String.Format("月利率:{0:p}\n",l.MonthlyInterestRate);

            output += String.Format("月付款:{0:C}\n",l.Payment);

            for (int month=0;month <=l.Months; month++)

            {

                output +=String.Format("{0月余额:1,-10:C}\n", month , l[month]);

            }

           Txtoutput.Text = output ;

        }

5、将完成的源程序压缩后,连同本实验报告,一同交给指导教师。

四、程序运行结果截图

程序1的运行结果截图:

程序2的运行结果截图:

程序3的运行结果截图:

五、思考题

1、请举例说明值类型与引用类型的区别。

2、重载方法的基本要求是什么?C#中的静态方法应该怎么调用(通过类名还是通过对象名)?

3、你认为索引器的使用,可以为我们编程人员带来哪些方便?

六、程序源代码(Winrar压缩后用附件提交,源代码中要有比较完备的注释)

七、收获,体会及问题(写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)

更多相关推荐:
哈希表实验报告

数据结构课程设计报告哈希表问题姓名郑健专业信息管理与信息系统班级083221学号08322126指导老师刘自强设计时间20xx年5月7日目录一摘要1二设计要求与分析21课程设计要求222程序分析2三数据结构选择...

哈希表实验报告

1实验目的掌握HASH表的建立和查表技术2实验内容1编写函数实现线性探查HASH表的插入和查找算法2编写主函数完成以下功能3定义一个长度为128的HASH表4随机产生120个0255之间的不重复的伪随机整数依次...

哈希表(实验报告附C++源码)

散列表一问题描述我们希望在浩瀚的图书中去发现一本书是否存在我们不知道书的编号只知道它的书名其实这已经不错了通过书名来查询它是否存在为了简化问题我们假设每本书的书名都是一组小写字母组成长度不超过100字符二需求分...

数据结构课程设计--哈希表实验报告

福建工程学院课程设计课程算法与数据结构题目哈希表专业网络工程班级xxxxxx班座号xxxxxxxxxxxx姓名xxxxxxx20xx年12月31日实验题目哈希表一要解决的问题针对同班同学信息设计一个通讯录学生信...

哈希表实验报告

数据结构实验报告四哈希表查找名字字符串实验题目哈希表查找名字字符串实验目标输入一组名字至少50个将其保存并利用哈希表查找输出哈希查找冲突次数哈希表负载因子查找命中率数据结构哈希表和数组二维二维数组用于静态顺序存...

哈希表实验报告完整版

实验报告姓名学号1实验题目针对某个集体中人名设计一个哈希表使得平均查找长度不超过R并完成相应的建表和查表程序基本要求假设人名为中国人姓名的汉语拼音形式待填入哈希表的人名共有30个取平均查找长度的上限为2哈希函数...

哈希表实验报告 定稿

数据结构课程设计报告设计题目哈希表的设计与实现专业通信工程班级学生学号指导教师起止时间XXXXXX学院年学期目录一设计要求1二数据结构选择与概要设计21数据结构选择122流程图2以号码为关键字哈希流程2以姓名为...

哈希表实验报告

数据结构课程设计报告哈希表设计姓名学号院系班级二一三年七月一需求分析1实验内容和实验目的1针对某个集体中的人名设计一个哈希表使得平均查找长度不超过R完成相应的建立和查表程序2人名为汉语拼音形式最长不超过19个字...

数据结构实验四哈希表及其查找

云南大学数学与统计学实验教学中心实验报告云南大学数学与统计学实验教学中心实验报告一实验目的练习二实验内容lt211lt10charhash10210个字符代码和作为分子31112lt206由此哈希表长mn300...

多表查询实验报告

数据库系统概论实验报告实验名称实验人实验地点实验日期多表查询一实验准备1硬件及软件环境要求为了使该实验顺利进行需要有一台计算机计算机必须安装Windows20xxWindowsXP或WindowsNT操作系统还...

北京理工大学 实验二 实验报告表

实验二实验报告表实验名称计算机中的数据表示与计算学号20xx216886姓名实验报告表21数值型数据在计算机中的二进制实验记录表唐玮班级计算机154班实验时间20xx年说明本实验对计算机内存数据的存放拟定为整数...

实验十五 实验报告表

五实验报告学号姓名班级实验时间年月日实验报告用计算机解题算法一请画出实验内容1真假话问题计算机求解算法的流程图二假定一个数列中有n个杂乱无章的整数请你用流程图描述一下插入排序的算法1

哈希表实验报告(10篇)