时间:2023-06-14 22:45 / 来源:未知
占比高达13.3%美FXCG原油期货行情走势分析预测当然有人会念,我直接将网页URL存入数据库实行查找不就好了,或者兴办一个哈希外实行查找不就OK了。
确实,将值映照到 HashMap 的 Key,可能正在 O(1) 的韶华杂乱度内返回结果,具有高效的所长。可是 HashMap 的告竣也存正在少许不敷,比如存储容量占比力高。研讨到负载因子的存正在,平时须要预留必然的空间,导致实践空间不行被齐全行使。比如,即使有一个1000万巨细的 HashMap,以String类型为Key(长度不高出16个字符,且极端少反复),以Integer类型为Value,须要霸占众少空间呢?实践上,它将占用1.2GB内存。比拟之下,存储1000万个int类型的数据只须要大约40MB空间,占比仅为3%;而存储1000万个Integer类型的数据则须要约161MB空间,占比高达13.3%。所以,一朝数据量增大到数亿级别,HashMap 所霸占的内存巨细将变得极端可观。
即使通盘网页黑名单编制蕴涵100亿个网页URL,则简便的数据库查找操作将极端费时,而且即使每个URL空间为64B,则通盘编制须要的内存空间将到达640GB,这关于平常的供职器来说是一个极端大的需求,难以告竣。
1970 年布隆提出了一种布隆过滤器的算法,用来判别一个元素是否正在一个齐集中。 这种算法由一个二进制数组和一个 Hash 算法构成。
性子上布隆过滤器是一种数据构造,比力奥妙的概率型数据构造(probabilistic data structure),特征是高效地插入和盘问,可能用来告诉你 “某样东西必然不存正在或者大概存正在”。
比拟于守旧的 List、Set、Map 等数据构造,它更高效、占用空间更少,可是纰谬是其返回的结果是概率性的,而不是确凿的。
实践上,布隆过滤器被通俗操纵于网页黑名单编制、垃圾邮件过滤编制、爬虫网址判重编制等范围。Google 闻名的散布式数据库 Bigtable 就应用了布隆过滤器来查找不存正在的行或列,以裁减磁盘查找的IO次数。其它,Google Chrome浏览器也应用布隆过滤器来加快和平浏览供职。
Ø即使一个元素的哈希值不正在数组中,则必然不存正在于齐集中,可是即使哈希值正在数组中,则存正在误判的概率(误判)
增大哈希数组的长度,使其也许容纳更众的元素。须要依照齐集巨细和误判率等成分,预估适宜的数组长度;
减少哈希函数的数目,以裁减哈希冲突的概率。众个哈希函数可能让元素哈希到众个身分上,从而低落误判率。
1.假设数据量为n,预期的失误率为p(布隆过滤器巨细和每个样本的巨细无合)。
2.依照n和p,算出BloomFilter一共须要众少个bit位,向上取整,记为m。
3.依照m和n,算出BloomFilter须要众少个哈希函数,向上取整,记为k。