`
尼阿卡
  • 浏览: 6411 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

简单哈希

 
阅读更多
                  
简单哈希

Description
使用线性探测法(Linear Probing)可以解决哈希中的冲突问题,其基本思想是:设哈希函数为h(key) = d, 并且假定哈希的存储结构是循环数组, 则当冲突发生时, 继续探测d+1, d+2…, 直到冲突得到解决.

例如, 现有关键码集为 {47,7,29,11,16,92,22,8,3},

设:哈希表表长为m=11;哈希函数为Hash(key)=key mod 11;采用线性探测法处理冲突。建哈希表如下:



现在给定哈希函数为Hash(key)= key mod m,要求按照上述规则, 使用线性探测法处理冲突.要求建立起相应哈希表,并按要求打印。

Input

仅有一个测试用例, 第1行为整数n与m(1 <= n, m <= 10000), n代表key的总数, m代表哈希表的长度, 并且令哈希函数为: Hash(key) = key mod m.
接下来n行,每行一个整数,代表一个key。Key与key两两不相同 ( 0 <= key <= 10, 000)。

Output
输出建立好的hash表,比如下表



应输出

0#11
1#22
2#NULL
3#47
4#92
5#16
6#3
7#7
8#29
9#8
10#NULL
----------------------------
Sample Input
Copy sample input to clipboard
3 5
1
5
6
-----------------------------
Sample Output
0#5
1#1
2#6
3#NULL
4#NULL
-------------------------------
代码如下:
#include<iostream>
using namespace std;

int a[10001];

int Hash(int key,int m)
{
	return key%m;
}

int main()
{
	int n,m,key;
	cin>>n>>m;
	
	for(int j = 0;j < n;j++)
	{
		cin>>key;
		int index = Hash(key,m);

		while(1)
		{
			if(a[index] == '\0')
			{
				a[index] = key;
				break;
			}
			index=(index+1)%m;
		}
	}

	for(int i = 0;i < m;i++)
	{
		cout<<i<<"#";
		if(a[i]=='\0')
			cout<<"NULL"<<endl;
		else
			cout<<a[i]<<endl;
	}

	return 0;
}
  • 大小: 2.7 KB
分享到:
评论

相关推荐

    带简单哈希表缓存的MFC本地图片查看器

    本项目“带简单哈希表缓存的MFC本地图片查看器”提供了一种高效的方法来查看本地图片,通过利用C++模板实现的哈希表缓存技术,极大地提高了图片加载速度。 哈希表(Hash Table)是一种数据结构,它提供了对数据的...

    简单哈希PicoSHA256-master.rar

    标题中的“简单哈希PicoSHA256-master.rar”暗示了这是一个关于PicoSHA256实现的项目,它是一个轻量级的SHA-256哈希函数库,适用于C++编程环境。SHA256是安全散列算法(Secure Hash Algorithm)家族的一员,广泛用于...

    一维数组简易哈希

    简单的一维数组散列算法,输入的数字不用太多…………

    简单哈希表构造

    一个关于哈希表的c程序,简单的构造一个便于使用的哈希表

    C语言实现简单易用哈希表

    在C语言中实现一个简单易用的哈希表,通常会涉及到以下几个核心知识点: 1. **哈希函数**:哈希函数是将键转化为数组索引的关键。一个良好的哈希函数应尽可能地减少哈希冲突,即不同的键映射到相同的索引位置。常见...

    简易哈希方程

    在这个场景中,我们讨论的是一个简易的哈希方程的实现,它使用Java语言编写,并且适用于JDK1.8及以上版本。 哈希函数的核心特性是其确定性,即相同的输入总是会产生相同的输出。然而,由于输出空间有限,不同的输入...

    简单哈希表应用

    int H1(char *key) { int temp[10]; long k,d=0,e; int c,f,g; while(*key) d+=*key++; d*=d; e=d; for(c=0;d!=0;c++) { d/=10; } g=c; for(f=c;f&gt;=0;f--) { temp[--g]=e; e/=10;...}

    C语言编写的简单哈希表代码示例

    以上代码实现了一个简单的哈希表。在代码中,通过定义struct Node结构表示哈希节点,包含键、值和指向下一个节点的指针。使用哈希函数将键映射到哈希表的索引位置,处理冲突采用链地址法,即在冲突的位置形成链表。...

    用C语言实现一个简单的哈希表(hash table)

    在C语言中,我们可以利用结构体来实现一个简单的哈希表。在这个例子中,我们将探讨哈希表的基本原理、哈希函数的设计、冲突解决策略以及如何在C语言中实现这些功能。 1. **哈希表的基本概念**: - 哈希表的核心是...

    哈希表de 设计.rar_c++ 哈希表_哈希_哈希 VC_哈希表

    常见的简单哈希函数包括直接取模、除留余数法等。对于更复杂的情况,可能需要使用更高级的哈希函数设计技术,如DJB2、MurmurHash等。 2. **装载因子**:装载因子是指哈希表中已存储元素数量与总容量的比例。当装载...

    一个简单的哈希表

    总的来说,这个“一个简单的哈希表”项目为我们提供了一个学习和理解哈希表实现的好机会,包括哈希函数的设计、冲突解决策略以及如何在实践中优化这些元素以提升性能。通过分析和改进这个简单的哈希表,我们可以深入...

    hash code 一种常用的哈希算法

    描述中提到,`Hashtable`中的哈希函数比社保号的简单哈希更复杂。社保号作为纯数字,可以直接用其本身作为哈希值,但一般情况下,对象可能包含各种类型的数据,如字符串、日期或者自定义对象。在这种情况下,Java...

    一些经典简单的哈希函数

    哈希函数简介 哈希函数是计算机科学中的一种常用技术,用于将输入数据转换为固定长度的输出,即哈希值。哈希函数的主要应用场景包括哈希表、数据压缩、数字签名、身份验证等。 在给定的文件中,我们可以看到多种...

    数据结构 哈希表 哈希算法

    2. **简单性**:哈希函数的计算过程应尽可能简单,以提高效率。 3. **确定性**:相同的输入关键字必须映射到相同的数组位置。 然而,由于关键字的无限性和数组大小的有限性,冲突是不可避免的。常见的解决冲突的...

    hash_operate.rar_哈希表的构造_构造哈希表

    常见的简单哈希函数有直接取模法(如`hash = key % size`),但这种方法对于某些数据分布可能产生较多冲突。更复杂的函数可能涉及位运算、数字分析等技术。 3. **处理冲突**:哈希表的效率在很大程度上取决于如何...

    哈希表-使用C语言实现哈希表数据结构-HashTable.zip

    常见的简单哈希函数有直接取模法和除留余数法。例如,对于整数键,可以使用`hash(key) = key % size`来获取索引,其中`size`是哈希表的大小。 2. **冲突解决**:即使有良好的哈希函数,冲突仍然可能发生。处理冲突...

    哈希综述的简单整理 特别全的关于哈希的整理

    ### 哈希综述知识点整理 #### 一、哈希技术概览 **哈希技术**是一种广泛应用于计算机科学中的高效数据结构和技术,主要用于快速查找、存储和检索数据。在大数据时代,随着数据量的急剧增长,如何高效地处理这些...

    哈希表的简单实现

    本篇文章将探讨哈希表的简单实现及其核心原理。 哈希表(Hash Table)的基本思想是利用哈希函数将关键字(Key)转化为数组的索引,使得数据的查找、插入和删除操作可以在平均情况下达到O(1)的时间复杂度。哈希函数...

    cpp-jwHash简单的哈希表C语言实现

    `cpp-jwHash`是一个C语言实现的简单哈希表项目,名为"jwHash",其设计目标是为C程序员提供一个轻量级且高效的哈希表解决方案。 在`cpp-jwHash`中,哈希表的核心部分包括以下几个关键知识点: 1. **哈希函数**:...

    哈希表课程设计 数据结构

    设计思想采用了除留余数法来构建哈希函数,这是一种常见的简单哈希函数,通过将元素的键(key)除以哈希表的大小,然后取余数来确定元素在表中的位置。为了处理可能出现的冲突(即两个不同的键可能映射到同一个位置...

Global site tag (gtag.js) - Google Analytics