哈希的一种用法——判断相等
来源:互联网 发布:u盘重装centos 编辑:程序博客网 时间:2024/04/28 14:19
小结来源:poj3349 & poj3274
在输入数据量比较大,时间要求比较高的情况下,判断相等可以考虑哈希的方法,比如,输入10W、100W,时间要求4000MS、7000MS,用普通方法肯定要TLE的,这时就需要hash。
首先要构造hash表,这里根据输入量来确定hash table的大小,比如poj3349中输入量最大12W,所以最坏情况每一种雪花都不相等需要12W个哈希项,所以这里设置HASH_BASE=12W以上的最小素数=120007(后面hash函数使用直接取余法)。
这里的构造相对简单,每次插入一个数据,这个数据都看成一个HashNode,并且用cur标记它是第几个HashNode。HashNode除了要有指向下一个HashNode的next指针外(如果两个HashNode哈希值相同,则映射到hash table的同一个地址处),还要有判断两个HashNode是否相等的变量,这里认为如果两个HashNode的num数组相等,就认为两个HashNode是同一片雪花。
const int HASH_BASE = 1200007;//100000*12以上的最小素数 const int NODE_NUMBER = 1200010;//node个数 int hashTable[HASH_BASE]; int cur; struct HashNode{ int num[6]; int next; }; HashNode node[NODE_NUMBER]; void initHashTable() { cur = 0; for (int i = 0; i < HASH_BASE; i++) { hashTable[i] = -1; } }
unsigned getHash(int num[]) { unsigned int value = 0; for (int i = 0; i < 6; i++) { value += num[i]; } return value%HASH_BASE; }
void insertHashNode(int num[], unsigned value) { for (int i = 0; i < 6; i++) { node[cur].num[i] = num[i]; } node[cur].next = hashTable[value]; hashTable[value] = cur; cur++; }
程序的进行是一边读数据,一边构建hash table,一边判断当前读到的数据是否与已经在hash table中的数据相等进行的.
bool searchHash(int num[]) { unsigned value = getHash(num); int next = hashTable[value]; while (next != -1) { if (compare(num, node[next].num)) return true; next = node[next].next; } insertHashNode(num, value); return false; }即如果发现该数据的哈希值与其它冲突(hashTable[value]!=-1),就比较是否相等,不想等就插入到表中。
poj3247也是同样模式,最大数据有10W个,即10W行,因此不能直接枚举找最大距离,必须用Hash查找相同行,找到相同行再比较最大距离,看是否更新最大距离。
0 0
- 哈希的一种用法——判断相等
- django学习——模板中判断相等与否的两种用法ifequal与if
- sql 判断的一种用法
- JavaScript—相等性判断
- 【剑指 offer】—— 浮点数的相等性判断
- 判断相等的宏
- 实数相等的判断
- mybatis判断相等的问题
- 编码优化无极限——由一个相等判断想到的
- java中一切皆对象——判断字符串是否相等的方式
- C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
- struts2标签循环一个数字及判断字符串相等的用法
- 相等判断
- java的判断对象相等的问题
- DateTime.Now的相等判断方法
- c# 相等判断之间的关系
- if语句相等判断的前后顺序
- 理解几个相等判断之间的关系
- 自定义的404页面在IE中无法显示
- Redis研究(十六)—发布/订阅模式
- 社説 20150125 欧州の量的緩和 政策協調強めてデフレ回避を
- [Leetcode 155, Easy] Min Stack
- 【专题】 - 数组元素操纵探索 - 黑马程序员
- 哈希的一种用法——判断相等
- 减少if语句的嵌套层次,提高代码的可读性
- 译文 日经春秋 20150125
- struts2+MySQL+jfreechart生成带热点
- USACO 2.1 Ordered Fractions
- 黑马程序员--锁
- json
- NYOJ 题目991 Registration system(set)
- Linux Wireless基础知识