文章更新: 20170307 初次成文 说起来好久没有更新过关于Chrome的文章了~ 对比Android平台上流行的几个浏览器,手势功能对于浏览器来说已经是其标准配置了,虽然Chrome也有其独特的手势特性(比如左/右划地址栏切换标签,下划菜单键弹出并选择菜单项等),但是深得"我国用户"喜爱的左/右划控制页面后退/前进的手势功能在却迟迟没有在Chrome上得到体现。这也是不少初次转战Chrome不久的用户无奈弃坑的原因。下面小苏就来说说如何为安卓Chrome添加手势吧~ 解决方案:
李杉 李林 编译自 《纽约时报》 量子位 报道 | 公众号 QbitAI 无人驾驶汽车一定会实现,这大概已经是所有科技和汽车行业从业者的共识。分歧只不过是要不要人类司机时刻准备接管,以及到底何时才能量产。 但是,无人车要真正进入主流,仍要解决许多问题。以下就是这项技术面临的一些挑战: 1. 危急时刻,根本指望不上人类司机接管 三年前,谷歌无人车团队忽然推出一款无油门无刹车无方向盘的“三无”低速全自动无人车,就和这个问题有关。 此前,谷歌面向自家员工开展了自动驾驶汽车内测,车内摄像头记录下的测试人员表现,
【导读】谈到人工智能(特别是计算机视觉领域),大家关注的都是这一领域不断取得的进步,然而人工智能到底发展到什么程度了?AI 已经成为万能的了吗?Heuritech 的 CTO Charles Ollion 希望通过他的文章可以揭露一些当前的真实情况。接下来就让我们一起看看这位作者都谈了什么内容吧!
大数据文摘作品 作者:Priya Dwivedi 编译:朝夕、吴双、钱天培 2016年年末,Amazon无人超市横空出世。在这家无人超市,店内的相机能够自动追踪你拿取的商品;完成购物后,你无需排队等候收银,只用直接走出超市。 自此之后,阿里和京东也已相继加入战局,先后推出无人超市体验店。一时间,无人超市的概念已实现了大规模普及。 无人超市的“黑科技”到底是什么呢?今天,文摘菌就为大家科普其中最重要的一环——基于计算机视觉技术的物体识别。 首先,让我们分析一下实现无人超市的两大难点。 难点一:把商品加入购物
看完今天Lady Gaga在超级碗中场秀的表演,不得不佩服Gaga的舞台表现力!当然Gaga背后的无人机阵列表演似乎抢占了更多的风头,成为社交网站讨论的热点。作为美国的“春晚”,超级碗去年的收视率达到了49%,也就是每两个美国人就有一个在看超级碗。 如此盛大的比赛自然少不了时下最火热的一些黑科技的身影。 这些年,超级碗上的黑科技 作为一个足球迷,小编对于美式足球的了解有限。但是看到今天超级碗上新英格兰爱国者队的逆转,还是非常激动的! 超级碗上最重要的当然是这场万众瞩目的比赛,一般这种对抗性的竞技比赛中,裁判
文章介绍了布隆过滤器(Bloom Filter)的基本原理、实现方法以及误判率的计算,并提供了相关公式和算法。布隆过滤器是一种空间效率极高的概率型数据结构,可以用于快速判断一个元素是否存在于集合中。
决策树的剪枝通常有两类方法,一类是预剪枝,另一类是后剪枝。预剪枝很好理解,就是在树的生长过程中就对其进行必要的剪枝,例如限制树生长的最大深度,即决策树的层数、限制决策树中间节点或叶节点中所包含的最小样本量以及限制决策树生成的最多叶节点数量等;后剪枝相对来说要复杂很多,它是指决策树在得到充分生长的前提下再对其返工修剪。常用的剪枝方法有误差降低剪枝法、悲观剪枝法和代价复杂度剪枝法等,下面将详细介绍这三种后剪枝方法的理论知识。
陌溪之前在面试字节提前批的时候,二面的面试官就问过 Redis 缓存穿透的问题,下面让我们一起深度还原一下陌溪当初的面试场景吧~
在空间上相对于其他数据结构,有很大优势, 20亿的数据需要 2000000000bit/8/1024/1024 = 238 M ,如果使用数组来存储,假设每个用户 ID 占用 4个字节的空间,存储20亿用户需要 2000000000byte/4/8/1024/1024 = 7600M 的空间,是布隆过滤器的32倍。
在谈布隆过滤器算法的之前,我们先说一说查找,比如在1亿数据中 查找数字X是否存在。 常见的方法是: 1,遍历查找,随着数据量的增长,查询的时间复杂度O(n)也是线性增长的。 2,对数据排序之后,进行二分查找,查找的时间复杂度 O(logn) 3,使用哈希表k-v结构存储,这样通过判断X是否在K的集合,时间复杂度是O(1)。 这些方法都不可避免的需要存储所有数据,随着数据量的增加,存储空间也不断增加。 一,布隆过滤器的原理: 当然还有一种不需要存储数据,快速判断数据X是否存在的神奇方法:松下问童子。 童子具有先验的知识,能够判断师傅(X)在山中采药。 若有多个童子都判断 师傅(X)在在山中采药。 我们是不是就可以更准确的判断X存在了。
布隆过滤器(BloomFilter)是一种大家在学校没怎么学过,但在计算机很多领域非常常用的数据结构,它可以用来高效判断某个key是否属于一个集合,有极高的插入和查询效率(O(1)),也非常省存储空间。当然它也不是完美无缺,它也有自己的缺点,接下来跟随我一起详细了解下BloomFilter的实现原理,以及它优缺点、应用场景,最后再看下Google guava包中BloomFilter的实现,并对比下它和HashSet在不同数据量下内存空间的使用情况。 学过数据结构的人都知道,在计算机领域我们经常通过牺牲空间换时间,或者牺牲时间换空间,BloomFilter给了我们一种新的思路——牺牲准确率换空间。是的,BloomFilter不是100%准确的,它是有可能有误判,但绝对不会有漏判断,说通俗点就是,BloomFilter有可能错杀好人,但不会放过任何一个坏人。BloomFilter最大的优点就是省空间,缺点就是不是100%准确,这点当然和它的实现原理有关。
0x00 前言 Bloom Filter 是由 Burton H. Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。 Bloom Filter 最初的论文发表在ACM,名为《Space/Time Trade-offs in Hash Coding with Allowable Errors》,感兴趣可以下载阅读。本篇主要分享 Bloom Filter 的基本原理、代码实现以及误判率的计算,看过 BitMap 那篇文章的童鞋再看
决策树算法生成的一颗完整的决策树会非常的庞大,每个变量都被详细地考虑过。在每一个叶节点上,只要继续分支就会有信息增益的情况,不管信息增益有多大,都会进行分支操作。最终所达到的目的是决策树的叶节点所覆盖的训练样本都属于同一类。
总之,BF算法可以应用于文档管理软件的文档查重、文档搜索和文档分类等场景中,能够帮助用户更加方便、快速地管理和查找文档。同时,BF算法具有查询速度快、内存占用少、误判率可控等优点,能够在文档管理软件中发挥其优势。
在前一篇文章中我们介绍了散列表和BitMap的相关概念与部分应用。本文将会具体讲解BitMap的扩展:布隆过滤器(Bloom filter)。
总之,BF算法可以应用于上网行为管理软件的上网行为管理查重、上网行为管理搜索和上网行为管理分类等场景中,能够帮助用户更加方便、快速地管理和查找上网行为管理。同时,BF算法具有查询速度快、内存占用少、误判率可控等优点,能够在上网行为管理软件中发挥其优势。
1.原理 布隆过滤器的巨大用处就是,能够迅速判断一个元素是否在一个集合中。因此他有如下三个使用场景:
0x00 前言 程序员应该无所畏惧,所以,一起来推导数学公式吧! 上文我们分享了 Bloom Filter 的基本原理和代码实现,在文章的结尾提到了 BF 的误判率以及几个重要参数的选取,我们只给出了最后的公式,而没有具体的推导过程。 这是会被狠狠地挑战的,本着追根刨底的精神,我们推导一下 BF 相关的数学公式。 文章结构 本文会分享关于 BF 的三个知识点: 错误率公式的推导 最佳哈希函数个数的推导 BF 的基数估计公式,即如何计算 BF 中的元素个数 0x01 背景补充 错误率 错误率有两种:
我们知道检查一个元素是否在某一个集合中,使用HashSet是比较好的选择,因为在不发生Hash碰撞的情况下它的时间复杂度为常数级别,但是在数据量比较大的情况下,使用HashSet将会占用大量的内存空间。举个例子,长城防火墙有100亿个需要屏蔽的网址,来自计算机的每一次请求都要经过防火墙的过滤判断请求URL是否在黑名单中,如果我们使用HashSet来实现过滤的话,我们假设每个URL的大小为64B,那么100亿个就至少需要大约640GB的内存空间,这显然是不符合实际情况的。另一种解决方案是我们可以将URL存入关系型数据库,每次计算机发起请求我们对数据库进行exits查询,然而这种方案适用于并发量比较小的情况,若并发量较大,那么我们就需要对数据库进行集群。
布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器可以插入元素,但不可以删除已有元素。其中的元素越多,false positive rate(误报率)越大,但是false negative (漏报)是不可能的。
位图的优点是节省空间,快,缺点是要求范围相对集中,如果范围分散,空间消耗上升,同时只能针对整型,字符串通过哈希转化成整型,再去映射,对于整型没有冲突,因为整型是有限的,映射唯一的位置,但是对于字符串来说,是无限的,会发生冲突,会发生误判:此时的情况的是不在是正确的,在是不正确的,因为可能不来是不在的,但是位置跟别人发生冲突,发生误判
我们在上一节中学习了 位图,知道了位图可以用来快速判断某个数据是否在一个集合中,但是位图有如下的缺点:
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter 是牺牲了正确率和时间以节省空间。 优缺点 Bloom filter 优点就是它的插入和查
用哈希表存储用户记录,缺点是需要消耗较大的内存;用位图存储用户记录,缺点是位图一般处理整形,内容是字符串或者自定义类型就很勉强。基于以上,若将哈希和位图结合,称为布隆过滤器,会不会把上面的问题都解决了呢?
本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移步。
因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。 场景如下图所示:
在二分类的情景中,Adaboost为了实现高精准的分类器,采取了集思广益,博取众长的集成的策略,集中群众智慧,成就英雄之举。实现了1+1大于2的分类效果。
这个牛轰轰的神器是布隆这位大牛在 1970 年发明的,是一个二进制向量数据结构,当时专门解决数据查询问题。可以用来告诉你 某样东西一定不存在或者可能存在。
背景介绍 Bloom filter(后面简称BF)是Bloom在1970年提出的二进制向量数据结构。通俗来说就是在大数据集合下高效判断某个成员是否属于这个集合。BF其优点在于: 插入和查询复杂度都是O(n) 空间利用率极高。 例子1: 像Yahoo这类的公共邮件服务提供商,总是需要过滤垃圾邮件。 假设有50亿个邮件地址,需要存储过滤的方法有: 所有邮件地址都存储到数据库。 缺点:每次都需要查询数据库,效率低。 使用Hashtable保存到内存里,接近O(1)的查询效率。 缺点:太占内存,假定每个
在一个高并发的计数系统中,如果一个key没有计数,此时我们应该返回0,但是访问的key不存在,相当于每次访问缓存都不起作用了。那么如何避免频繁访问数量为0的key而导致的缓存被击穿?
是指查询一个不存在的数据,mysql查询不到数据,也不会直接写入缓存,每次请求都要去查数据库。可能导致数据库挂掉,这种情况大概率是遭到了攻击。
什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如
因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。
作者:孤独烟 来自: http://rjzheng.cnblogs.com/ 题记 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一
我们之前讲了Redis的缓存雪崩、穿透、击穿。在文章里我们说了解决缓存穿透的办法之一,就是布隆过滤器,但是上次并没有讲如何使用布隆过滤器。
缓存穿透解决方案 设置空值 📷 布隆过滤器 📷 📷 优点 可以将存在的缓存, 位置设置为1, 然后当不存在的参数过来的时候, 会匹配到0上,这样就会直接返回不存在 缺点 存在错误判断, hash冲突 删除缓存时无法删除指定的1的位置, 应为存在多数据,同一hash, 所以无法删除 增加开发成本, 维护成本提高 可以判断一定不存在, 但是不能判断一定存在[存在误判] 使用布隆过滤器 添加依赖 <dependency> <groupId>com.google.guava</groupId> <a
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它的特点是高效地插入和查询,但是有一定的误判率。换句话说,布隆过滤器可能会告诉你一个元素在集合中,即使它实际上不在(假阳性),但它绝不会告诉你一个元素不在集合中,如果它实际上是在的(无假阴性)。
注册账号是进行网络冲浪的第一步操作,而拥有一个具有个性且独一无二的用户昵称是非常重要的,很多人在填写昵称时,常常会看到 此昵称已存在 的提示,系统是如何快速知道当前昵称是否存在呢?总不能挨个去遍历对比吧,这时候就需要我们本文中的主角: 布隆过滤器
那有没有什么 办法可以解决呢? 这就是我们今天要学的布隆过滤器(Bloom Filter)
Wikipedia 上面提到布隆过滤器早在 1970 年就被提出来,很难想象在当时那个年代它的主要用途是什么,估计当时提出也是一个数据模型吧。
我们有1千万个整数,整数的范围在1到1亿之间。如何快速查找某个整数是否在这1千万个整数中呢?
Bloom Filter是一种空间效率非常高的随机数据结构,用于判断一个元素是否属于一个集合。它的基本原理是使用多个哈希函数将元素映射到一个位数组中,如果一个元素对应的位都为1,则认为这个元素属于集合中。
当你为某个分类问题建立了一个模型时,一般来说你会关注该模型的所有预测结果中正确预测的占比情况。这个性能指标就是分类正确率。
总之,BF算法可以应用于文档管理软件的窗口列表查询、窗口状态监测和窗口内容监控等场景中,能够帮助用户更加方便、快速地监控和管理窗口。同时,BF算法具有查询速度快、内存占用少、误判率可控等优点,能够在文档管理软件中发挥其优势。
我们都了解 Redis主从库集群模式。在这个模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。
Bloom Filter布隆过滤器 算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希 表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘,要么是内存。很多时候要么是以时间换空间,要么是以空间换时 间。 在响应时间要求比较严格的情况下,如果我们存在内里,那么随着集合中元素的增加,我们需要的存储空间越来越大,以及检索的时间越 来越长,导致内存开销太大、时间效率变低。 此时需要考虑解决的问题就是,在数据量比较大的情况下,既满足时间要求,又满足空间的要求。即我们需要一个时间和空间消耗都比较 小的数据结构和算法。Bloom Filter就是一种解决方案。 Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以 用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。 它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元 素不再集合,那肯定不在。如果判断元素存在集合中,有一定的概率判断错误。因此,Bloom Filter”不适合那些“零错误的应用场合。 而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。 Bloom Filter 原理 布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我 们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检 元素很可能在。这就是布隆过滤器的基本思想。 Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了k个哈希函数,每个字符串跟k个bit对应。从而降低了冲突的概 率。
我们已有如下所示数据集,特征属性包含天气、温度、湿度、风速,然后根据这些数据去分类或预测能否去打高尔夫球,针对此类问题你会怎么解决呢。
我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的? 用服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。 如何快速查找呢?
领取专属 10元无门槛券
手把手带您无忧上云