Reference: Wiki  PrincetonAlgorithm

What is Hash Table

Hash table (hash map) is a data structure used to implement an associative array, a structure that can map keys to values.
A hash table uses a hash function to compute an index into an array of buckets or slots, from which the desired value can be found.

hash function: transform the search key into an array index

What is Hash Collisions

Different keys that are assigned by the hash function to the same bucket.

Perfect Hashing

A perfect hash function for a set S is a hash function that maps distinct elements in S to a set of integers, with no collisions.

Perfect hashing allows for constant time lookups in the worst case. This is in contrast to most chaining and open addressing methods, where the time for lookup is low on average, but may be very large, O(n), for some sets of keys.

Load Factor

A critical statistic for a hash table.

Load factor = n / k

where:
n = number of entries
k = number of buckets

  • high load factor: hash table becomes slower, and it may even fail to work (depending on the method used).
  • low load factor: considering the proportion of unused areas in the hash table. This results in wasted memory.

Also, one should examine the variance of number of entries per bucket. For example, two tables both have 1000 entries and 1000 buckets; one has exactly one entry in each bucket, the other has all entries in the same bucket. Clearly the hashing is not working in the second one.

Hash Functions

3 primary requirements in implementing a good hash function for a given data type:

  1. It should be deterministic - equal keys must produce the same hash value.
  2. It should be efficient to compute.
  3. It should uniformly distribute the keys.

Suppose we have an array that can hold M key-value pairs, then we need a function that can transform any given key into an index into that array.

Positive Integers

modular hashing

Choose the array size M to be prime, and, for any positive integer key k, compute the remainder when dividing k by M. (k % M)

Floating-Point Numbers

Simple but defective way:
If the keys are real numbers between 0 and 1, we might just multiply by M and round off to the nearest integer to get an index between 0 and M-1.
This approach is defective because it gives more weight to the most significant bits of the keys; the least significant bits play no role.
Better way (adopted by Java):
Use modular hashing on the binary representation of the key.

String 

Simply treat them as huge integers.

R is prime number, Java uses 31. Calculate each bit of the array.

int hash = 0;
for (int i = 0; i < s.length(); i++)
hash = (R * hash + s.charAt(i)) % M;

Also, we can use MD5 to randomize input keys

int hashFunc(String key) {
return md5(key) % HASH_TABLE_SIZE;
}

APR hash function uses magic number 33. Similar with the first method.

int hashFunc(String key) {
int sum = 0;
for (int i = 0; i < key.length(); i++) {
sum = sum * 33 + (int) key.charAt(i);
sum = sum % HASH_TABLE_SIZE;
}
return sum;
}

Compound Keys

We can follow the ways of processing string.

For example, we use a tuple as key (element1, element2, element3)

int hash = (((element1 * R + element2) % M) * R + element3) % M;

By Using hashCode() in Java

private int hash(Key key) {
return (key.hashCode() & 0x7fffffff) % M;

Collision Resolutions

Generally, there are four ways to resolve collision:

  1. Separate Chaining
  2. Open Addressing
  3. Robin Hood Hashing
  4. 2-Choic Hashing

details check here

Hash Map (Hash Table)的更多相关文章

  1. [LeetCode] Repeated DNA Sequences hash map

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  2. POJ 1840 Eqs 二分+map/hash

    Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...

  3. Implement Hash Map Using Primitive Types

    A small coding test that I encountered today. Question Using only primitive types, implement a fixed ...

  4. hdu1381 Crazy Search(hash map)

    题目意思: 给出一个字符串和字串的长度,求出该字符串的全部给定长度的字串的个数(不同样). 题目分析: 此题为简单的字符串哈hash map问题,能够直接调用STL里的map类. map<str ...

  5. (通俗易懂小白入门)字符串Hash+map判重——暴力且优雅

    字符串Hash 今天我们要讲解的是用于处理字符串匹配查重的一个算法,当我们处理一些问题如给出10000个字符串输出其中不同的个数,或者给一个长度100000的字符串,找出其中相同的字符串有多少个(这样 ...

  6. Hash Map 在java中的解释及示例

    目录 HashMap在java中的应用及示例 HashMap的内部结构 HashMap的性能 同步HashMap HashMap的构造函数 HashMap的时间复杂度 HashMap的方法 1. vo ...

  7. TTTTTTTTTTTT 百度之星D map+hash

    Problem D  Accepts: 2806  Submissions: 8458  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6 ...

  8. Redis的增删改查 c# key value类型和hash map 类型

    using Newtonsoft.Json; using StackExchange.Redis; using System; using System.Collections.Generic; us ...

  9. hdu 4622 (hash+“map”)

    题目链接:https://vjudge.net/problem/HDU-4622 题意:给定t组字符串每组m条询问--求问每条询问区间内有多少不同的子串. 题解:把每个询问区间的字符串hash一下存图 ...

随机推荐

  1. INTELLIJ IDEA集成CHECKSTYLE(转)

    转自:http://www.cnblogs.com/kiwi-wang/p/4166410.html 本文中使用intelliJ IDEA版本为14.0.1,其他版本差异不大,可同样安装. 下载安装C ...

  2. StringBuffer学习笔记

    StringBuffer是什么? StringBuffer是使用缓冲区的,本身也是操作字符串的,它是一个具体的操作类.与String类不同的是,它其中的内容是可以改变的.它不能像String那样采用直 ...

  3. 【微信公众号】验证用户OpenID是否关注某个公众号

    1.获取OpenID #region 获取微信支付的OpenId /// <summary> /// 获取微信支付的OpenId /// </summary> /// < ...

  4. poj 2104 K-th Number - 经典划分树

    Description You are working for Macrohard company in data structures department. After failing your ...

  5. [React] React Router: activeStyle & activeClassName

    react-router provides two props for setting a specific style on a Link component whose path matches ...

  6. [Angular 2] Transclusion in Angular 2

    Link: Blog Single transclude: <ng-content></ng-content> Multi-translcude: <ng-content ...

  7. Keil IDE指南.

    Keil IDE指南(转载) 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的 ...

  8. NumberSpinner( 数字微调) 组件

    本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个组件依赖于Numberbox(数值输入框)和 Spinner(微调)组件. 一. 加载方式//class 加载方式<i ...

  9. hdu 2031

    水题 AC代码: #include<iostream> using namespace std; int main() { int i,j,b[1000],k; while(cin> ...

  10. NPOI心得

    一个Excel文件表示为一个IWookbook,Sheet是ISheet,其它细分为IRow,ICell. 2003和2007版本为IWookbook接口的不同实现:HSSFWookbook和XSSF ...