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

哈希函数/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,

一致性哈希表

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

左程云算法 哈希函数相关推荐

  1. 左程云算法笔记(四)哈希表和有序表的使用、链表

    左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...

  2. LeetCode左程云算法课笔记

    左程云算法课笔记 剑指Offer 位运算 ^运算符理解 寻找出现双中的单数 取出一个数最右边1的位置 找所有双出现中的两个单数 整数二进制奇数位偶数位交换 数组中全部出现k次返回出现一次的数 链表 判 ...

  3. 左程云算法笔记总结-基础篇

    基础01(复杂度.基本排序) 认识复杂度和简单排序算法 时间复杂度 big O 即 O(f(n)) 常数操作的数量写出来,不要低阶项,只要最高项,并且不要最高项的系数 一个操作如果和样本的数据量没有关 ...

  4. CSDN专访左程云,算法之道

    算法的庞大让很多人畏惧,程序员如何正确的学习并应用于面试.工作中呢?今天,CSDN邀请了IBM软件工程师.百度软件工程师.刷题5年的算法热爱者左程云,来担任CSDN社区问答栏目的第二十六期嘉宾,届时会 ...

  5. 左程云算法笔记总结-基础提升篇

    提升01(哈希) 认识哈希函数 哈希函数的输入一般需要是无穷尽的,没有限制:输出可以有一定的范围,比如MD5加密后产生的字符串可以有2的32次方-1种,用十六进制表示需要16个字符. 相同的输入对应相 ...

  6. B站左程云算法视频笔记05

    大数据 有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL (布隆过滤器或者哈希函数分流) [补充]某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种 ...

  7. 【笔记:左程云算法与数据结构】4.链表

    用快慢指针找到链表的中点 "定制"三种不同的情况 1.元素个数为偶数时,慢指针指向中间偏左的元素 2.元素个数为偶数时,慢指针指向中间偏右的元素 3.慢指针指向中间的前一个元素 代 ...

  8. B站左程云算法视频基础提升02

    岛问题 一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右相连,如果一片1连在一起,这个部分叫做一个岛,求一个矩阵有多少个岛 思路:遍历,infect class Solution {publ ...

  9. 左程云 算法与数据结构基础班

    排序优化 在C++的STL中为我们提供了很多排序函数如sort.stable_sort等等,平时我们也会直接使用这些现成的排序函数,为了让我们更加深层的了解底层的排序函数,现在我们从如何实现一个通用的 ...

  10. B站左程云算法视频高级班05

    题目一:在一个无序数组中,求第k小的数 快排:荷兰国旗问题 BFPRT 有讲究的选择一个数 之后的步骤和快排一样 假设整个方法叫f函数 f(arr, k) 1)0~4一组 5~9一组 0~14一组 剩 ...

最新文章

  1. 三星note5 android版本区别吗,三星Note5哪种颜色好看?三星Note5四种颜色区别对比图解...
  2. 人力资源中最常见的7张报表
  3. zabbix_agent自动部署安装
  4. 定时器:SetTimer
  5. 运行效果演示-修改applcation-db.xml 文件
  6. 前端学习(1296):第三方模块nodenrm
  7. 最短路径——dj+floyd+spfa(hdu2544)
  8. 随想录(串口屏带来的启示)
  9. 62.Linux/Unix 系统编程手册(下) -- 终端
  10. 使用HTML5里的classList操作CSS类
  11. 华为软件开发云又出新服务:开源镜像站正式上线,致敬开源,使能开发者!
  12. zend studio php插件,Zend Studio使用技巧两则 zend studio安装 zend studio 插件 zend studio 中文...
  13. Active Directory攻防实验室环境搭建教程(一)
  14. Mac上使用Chrome浏览器截取长图
  15. pikachu靶场 暴力破解 sql注入详解
  16. 单元格下拉框实现复选框多选_将复选框链接到带有宏的单元格
  17. 135编辑器代码是html吗,不会代码,你也能做背景样式!!!
  18. 学习fullpage的使用
  19. 人工智能的发展对生活有什么影响?
  20. 微信能用支付宝钱包了

热门文章

  1. 正点原子战舰(STM32F103ZET6) 跑蓝牙协议栈 --传统蓝牙搜索演示以及实现原理
  2. zuc算法代码详解_ZUC算法了解
  3. 窥探PTAM之Mapping线程
  4. iis服务器网站启动不了,IIS上打不开asp网站怎么办
  5. Android 用代码获取基站号(cell)和小区号(lac)
  6. 什么是波特率,波特率怎么计算
  7. 经典的战略管理和营销管理书《定位》
  8. 博客前端模板源码(力荐)
  9. 3D建模师是吃青春饭的吗?被高薪挖掘的建模人才,靠的是这个
  10. 计算机汇编语言编程教程,《汇编语言程序设计教程》.pdf