海量数据处理算法.pdf

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
海量数据处理算法

海量数据处理 所谓海量数据处理,是指基于海量数据的存储、处理或操作。因为数据量太大,导致要么 无法在较短时间内迅速解决,要么无法一次性装入内存。 事实上,对于时间问题,可以采用巧妙的算法搭配合适的数据结构(如布隆过滤器、散 列、位图、堆、数据库、倒排索引、Trie 树)来解决;对于空间问题,可以采取分而治之 的方法(如利用散列映射),把规模大的数据转化为规模小的,最终各个击破。 处理海量数据问题有很多种方法,本章介绍 10 种典型方法:散列分治、多层划分、 MapReduce、外排序、位图、布隆过滤器、Trie 树、数据库、倒排索引和 simhash 算 法。 本章将摒弃绝大部分的细节,重点谈方法和模式论,且注重用通俗、直白的语言阐述相关 问题。最后,有一点必须强调的是,本章内容是基于面试题的分析基础进行讲述的,具体 实践过程中要视具体情况具体分析,且各个场景下需要考虑的细节也远比本章所描述的任 何一种解决方案复杂得多。 6.1 基础知识 :STL 容器 先具体了解一下 STL 容器,它是许多解决方案的基础。 一般来说,STL 容器分两种:序列式容器和关联式容器。序列式容器包括 vector、list、 deque、stack、queue 、heap 等,而关联式容器中,每笔数据或每个元素都有一个键 (key )和一个值(value ),即所谓的键值对。当元素被插入到关联式容器中时,容器的 内部结构(可能是红黑树,也可能是散列表)便会依照其值大小,以某种特定规则将这个 元素放置于适当的位置。 C++ 11 标准之前,旧标准规定标准的关联式容器分为 set (集合)和map (映射)两 大类,以及这两大类的衍生体 multiset (多键集合)和 multimap (多键映射),这些容 器均基于 red-black tree (红黑树)实现。此外,还有另一类非标准的关联式容器,即 hashtable (散列表),以及以hashtable 为底层实现机制的 hash_set (散列集合)、 hash_map (散列映射)、hash_multiset (散列多重集合)和hash_multimap (散列多 重映射)。也就是说,set、map、multiset 和 multimap 都内含一个红黑树,而 hash_set、hash_map、hash_multiset、和 hash_multimap 都内含一个 hashtable1 , 具体关系如图 6-1 所示。 图 6-1 set、map、multiset 和 multimap set 同 map 一样,所有元素都会根据元素的键自动排序,因为 set 和 map 两者的所有操 作都只是转而调用红黑树的操作行为。不过,值得注意的是,两者都不允许任意两个元素 有相同的键。 不同的是,set 的元素不像 map 那样可以同时拥有值和键,set 元素的值就是键,键就是 值,而 map 的所有元素都是 pair ,同时拥有值和键,pair 的第一个元素被视为键,第二 个元素被视为值。 至于 multiset 和 multimap ,它们的特性及用法与set 和 map 几乎相同,唯一的差别就 是它们允许键重复,即所有的插入操作基于红黑树的 insert_equal()而非 insert_unique()。 hash_set、hash_map、hash_multiset和 hash_multimap hash_set 和 hash_map 的一切操作都是基于 hashtable 的。不同的是,hash_set 同 set 一样,同时拥有值和键,且值就是键,键就是值,而 hash_map 同 map 一样,每一个元 素同时拥有一个值和一个键,所以其使用方式和 map 基本相同。另外,因为 hash_set 和 hash_map 都是基于 hashtable 的,而 hashtable 没有自动排序功能,所以 hash_set 和 hash_map 都不具备自动排序功能。 至于 hash_multiset 和 hash_multimap ,它们的特性与multiset 和 multimap 几乎完全 相同,唯一的差别就是 hash_multiset 和 hash_multimap 的底层实现机制是 hashtable (区别于multiset 和 multi

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档