左程云算法 哈希函数

哈希函数是一个输入域无限但是输出域可以有限的函数

哈希函数/m就可以得到一个在(0,m-1)之间均匀分布的输出域

题目case1:右40亿个无符号整数,给1G的内存,找出出现次数最多的数字

这里使用常规的哈希表存储,会出现内存溢出的问题,表里面的数字都模100,把它存在哈希表中,再遍历这100个表里面的数据,内存就不会出现溢出。

哈希表在使用的时候可以认为其增删改查的复杂度为O(1),实际上为O(lng N)

题目case2:

设计RandomPoo l结构
【题目】
in it-
种结构
在该结构中有如下三个功能:
insert (key):将某个key加入到该结枸,做到不重复加入
delete (key):将原本在结构中的某个key移除
getRandom ():等概率随机返回结构中的任何一个key。
【要求】
Insert、delete和getRandom方法的时间复杂度都是0(1)

解题思路: 准备两个哈希表,一个是index->str,一个是str->index,delete的实现,每次delete一个就用最后一个str去补充这个delete掉的洞;

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class RandomPool
{
	private HashMap<K,Integer> keyIndedxMap;
	private HashMap<Integer,K> indexKeyMap;
	private int size;
	
	public Pool(){
		this.keyIndexMap = new HashMap<K,Integer>();
		this.indexKeyMap = new HashMap<Integer,K>();
		this.size = 0;
	}
	public void insert(K key){
		if(!this.keyIndexMap.containsKey(key)){
			this.keyIndexMap.put(key,this.size);
			this.indexKeyMap.put(this,size++,key);
		}
	}
	public void delete(K key){
		if(this,keyIndexMap.containsKey(key){
			int deleteIndex =this.keyIndexMap.get(key);
			int lastIndex =--this.size;
			K lastKey = this.indexKeyMap.get(lastIndex);
			this.keyIndexMap.put(lastKey,deleteIndex);
			this.indexKeyMap.put(deleteIndexx,lastKey);
			this.keyIndexMap.remove(key);
			this.indexKeyMap.remove(lastIndex);
		}
	}
	public K getRandom(){
		if(this.size==0){
			return null;
		}
		int randomIndex = (int)(Math.random()*this.size);
		return this.indexKeyMap.get(randomIndex);
	}
}

 布隆过滤器:只会出现白名单变黑的情况不会出现黑名单变白的情况,另外影响白名单误确定为黑名单的因素是哈希表的位图开有多大

 n=样本量,p=失误率

步骤:1、确定模型,2、问失误率,失误率与单样本量的大小无关。失误率m=-(N*lnp)/(ln2)^2,

一致性哈希表

按比例抢环可以很好的解决初始不均或者负载不均的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值