【模版】简单哈希和哈希表处理冲突

哈希(Hash)算法就是单向散列算法,它把某个较大的集合P映射到另一个较小的集合Q中。数学原理听起来很抽象,在网上找到一个很生动的描述。我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分成100个小猪圈。 然后把每个小猪,按照体重赶进各自的猪圈里,记录档案。如果我们要精确找到某个小猪怎么办呢?我们需要每个猪圈,每个小猪的比对吗? 当然不需要了。 我们先看看要找的这个小猪的体重,然后就找到了对应的猪圈了。
在这个猪圈里的小猪的数量就相对很少了。 我们在这个猪圈里就可以相对快的找到我们要找到的那个小猪了。

当题目中数值很小的时候我们只需要用哈希数组来存取数值来当作它的下标,从而寻找

http://blog.csdn.net/u013486414/article/details/30775765 这道题可以让你明白简单哈希的应用。

当数值特别大的时候我们运用哈希表,哈希表存储的时候可能会有一个地址出现两个数值,以为一个地址只能有一个数值的储存,所以这就产生了冲突,冲突的处理方法有好多种,我一般用链表处理,这也是当初学长交给我的,先挂后找。

例:已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79),哈希函数为:H(key)=key MOD 13,

用链地址法处理冲突:

先把他们用链表存起来,然后找。

struct node
{
    int date;
    struct node *next;
}*h[N];
void gua (int x)  //先把链表挂上
{
    int a=x%N;
    struct node *p;
    p=(struct node *)malloc(sizeof(struct node ));
    p->date=x;
    p->next=h[a];
    h[a]=p;
}
int findx (int x)  //再寻找
{
    int a = x%N;
    int count  = 0;
    for (struct node *p = h[a]; p; p = p->next)
    {
        if (p->date == x)
            count ++;
    }
    return count ;
}  

http://blog.csdn.net/u013486414/article/details/30826753  这道题可以好好看一下

【模版】简单哈希和哈希表处理冲突

时间: 2024-10-19 21:36:38

【模版】简单哈希和哈希表处理冲突的相关文章

【哈希和哈希表】Beads

问题 G: [哈希和哈希表]Beads 时间限制: 1 Sec  内存限制: 128 MB提交: 6  解决: 2[提交] [状态] [讨论版] [命题人:admin] 题目描述 Byteasar once decided to start manufacturing necklaces. He subsequently bought a very long string of colourful coral beads for a bargain price. Byteasar now als

简单好用的哈希表

哈希表板子 以后考试不要总自己发挥妄图创造模板.. 1 struct Hsh{ 2 int head[N1],to[M1],nxt[M1],val[M1],cte; 3 void ins(int x,int w) 4 { 5 int u=x%maxn,j,v; 6 for(j=head[u];j;j=nxt[j]) 7 { 8 v=to[j]; 9 if(v==x) return; 10 } 11 cte++; to[cte]=x; nxt[cte]=head[u]; 12 head[u]=ct

蓝书《哈希与哈希表》——知识整理

一.前言: 有些数据不经处理是难以利用的.所谓哈希,就是通过哈希函数将这种难以简单利用的数据(比如矩阵.字符串等等)转化为可以用一个变量表示甚至可以作为数组下标的哈希值.有了哈希值,就可以实现时间复杂度近乎为常数的快速查找与匹配,更简单有效地利用一些复杂数据. 二.字符串哈希: 即对象为字符串的哈希.常将字符串看做一个不严格的b进制的数(有时数位上的数有可能要比b还要大),转换为10机制后再模一个数p(以便存储)得到哈希值.即定义哈希函数: H(C)=(c1*b^(m-1) + c2*b^(m-

学习哈希及哈希在大数据检索和挖掘中的应用

http://cs.nju.edu.cn/lwj/conf/CIKM14Hash.htm Learning to Hash with its Application to Big Data Retrieval and Mining Overview Nearest neighbor (NN) search plays a fundamental role in machine learning and related areas, such as information retrieval an

九. 常用类库、向量与哈希6.哈希表及其应用

哈希表也称为散列表,是用来存储群体对象的集合类结构. 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系.当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低. 一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录.这就需要在对象的存储位置和对象的关键属性(设为 k)之间建立一个特定的对应关系(设为 f),使每个对象与一个唯一的存储位置

算法导论11.4开放寻址法(除法哈希函数开放寻址处理冲突)

/* * IA_11.4OpenAddressing.cpp * * Created on: Feb 12, 2015 * Author: sunyj */ #include <stdint.h> #include <string.h> #include <iostream> class Node { public: Node() { } Node(int64_t const k, int64_t const d) : key(k), data(d) { } int64

字符串哈希之散列表处理冲突 poj1880

#include <stdio.h> #include <string.h> #include <stdlib.h> #define M 100001 #define N 100 struct node //链表数组 { int id; struct node *next; }*d[M]; char a[M][N],b[M][N]; char s[N],str[N]; unsigned int ELFHash(char *str) { unsigned int hash

哈希,链接法解决冲突

#include<iostream>using namespace std; struct ListNode;typedef struct ListNode *Position;struct Hash_table;typedef Hash_table *Hashtab;typedef Position List; #define Min_table_size 10 struct ListNode{ int Emelent; Position Next;}; struct Hash_table{

『一本通』哈希和哈希表

Oulipo 1 #include<bits/stdc++.h> 2 #define N 1000000+5 3 using namespace std; 4 typedef unsigned long long ULL; 5 const int b=55; 6 ULL n,m,s,ans,p[N],sum[N]; 7 char s1[N],s2[N]; 8 9 int main() { 10 scanf("%s",s1+1),scanf("%s",s2