Hash是把锋利的刀子,处理海量数据时经常用到,大家可能经常用hash,但hash的有些特点你是否想过、理解过。我们可以利用我们掌握的概率和期望的知识,来分析Hash中一些有趣的问题,比如:
平均每个桶上的项的个数
平均查找次数
平均冲突次数
平均空桶个数
使每个桶都至少有一个项的项个数的期望
本文hash的采用链地址法发处理冲突,即对hash值相同的不同对象添加到ha...
分类:
其他好文 时间:
2016-04-15 12:06:08
阅读次数:
173
数据结构中有数组和链表来实现对数据的存储,这两者有不同的应用场景,数组的特点是:寻址容易,插入和删除困难;链表的特点是:寻址困难,插入和删除容易;哈希表的实现结合了这两点,哈希表的实现方式有多种,在HashMap中使用的是链地址法,也就是拉链法。看下面这张流传很广的图, 拉链法实际上是一种链表数组的
分类:
编程语言 时间:
2016-03-16 20:51:14
阅读次数:
247
在上一篇博文中,我们讲述了使用链地址法解决冲突的方法。这里我们介绍另一种方式:开地址法解决冲突。
基本思想:当关键码key的哈希地址H0 = hash(key)出现冲突时,以H0为基础,产生另一个哈希地址H1 ,如果H1仍然冲突,再以H0
为基础,产生另一个哈希地址H2 ,…,直到找出一个不冲突的哈希地址Hi ,将相应元素存入其中。根据增量序列的取值方式不同,相应的再散列方式也不同...
分类:
其他好文 时间:
2016-01-23 15:36:28
阅读次数:
203
给出N个六边形的6个边长,问其中是否有完全相同的两个六边形,完全相同包括边的长度和位置都要相同。边给出的顺序是逆时针或者顺时针的。给每个6边形一个哈希值,方法是对6条边长度的平方和取模#include#include#includeusing namespace std;const int maxn...
分类:
其他好文 时间:
2015-08-21 13:04:20
阅读次数:
112
/*
Name: Hash
Copyright:
Author: huowolf
Date: 27/06/15 20:57
Description: HashTable的简单实现
*/
#include
using namespace std;
#define MAXSIZE 17 //该值最好采用某个4n+3形式的素数
#define NULLKEY -1
#def...
分类:
其他好文 时间:
2015-06-28 15:42:06
阅读次数:
135
Description 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法。建立链表的时候采用尾插法。Input 第一行为哈西表的长度;第二行为关键字的个数n; 第三行为关键字集合; 第四行为要查找的数据。Output 如果查找成功,输出该关键字所在哈希表中的地址和...
分类:
其他好文 时间:
2015-06-16 10:44:42
阅读次数:
574
接上篇 散列的简要描述和链地址法
解决散列冲突的方法:1. 线性探测法如果我们能够预测将要存入表中元素的数目,而且我们有足够的内存空间可以容纳带有空闲空间的所有关键字,那么使用链地址法是不值得的。我们依靠空的存储空间解决冲突:设计表长M大于元素数目N,开放地址法,最简单的开放地址法是线性探测法:初始化该符号表的实现将元素保存到大小是元素个数两倍的散列表中。void HashTableInit(in...
分类:
其他好文 时间:
2015-04-22 18:14:23
阅读次数:
207
以下是经过DEV-C++调试过的代码 还有框图:
头文件hashlist.h
#ifndef _H_HASHLIST_
#define _H_HASHLIST_
#define HASH_NUM_MAX 100
#define u32 unsigned int
//typedef struct _Node * pNode;
//typedef struct _Hash...
分类:
其他好文 时间:
2014-12-10 22:51:52
阅读次数:
295
一:学些心得
1 getHash函数的设计最牛的是Unix中处理字符串的ELFHash();当然也可以自己写一个比较简单的getHash函数关键在于去mod M的M值,使器均匀的分布(一般是不大于hash_size的某一个素数,接近于2的某次幂);但是有一点需要注意就是返回的hash值必须是正值。
2 处理冲突的方法:链地址法是比较好的方法了(静态动态都可以的);二次哈希(一般是加key值)再...
分类:
其他好文 时间:
2014-11-25 14:28:57
阅读次数:
332
一,线性探测法
核心:冲突的时候线性的向下寻找可用空间;
缺点:对同一散列地址的争夺现象会出现堆积;
二,二次探测法
核心:冲突的时候探测下面的+_k^2;
缺点:不易探测到整个散列表的所有空间;
三,链地址法
同一地址放置一条链...
分类:
其他好文 时间:
2014-10-08 11:29:15
阅读次数:
200