编程、语言—迷你书_编程之法:面试和算法心得.pdf

编程、语言—迷你书_编程之法:面试和算法心得.pdf

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

第 6 章 海量数据处理 所谓海量数据处理,是指基于海量数据的存储、处理或操作。因为数据量太大, 导致要么无法在较短时间内迅速解决,要么无法一次性装入内存。 事实上,对于时间问题,可以采用巧妙的算法搭配合适的数据结构(如布隆过 滤器、散列、位图、堆、数据库、倒排索引、Trie 树)来解决;对于空间问题,可 以采取分而治之的方法(如利用散列映射),把规模大的数据转化为规模小的,最终 各个击破。 处理海量数据问题有很多种方法,本章介绍10 种典型方法:散列分治、多层划 分、MapReduce、外排序、位图、布隆过滤器、Trie 树、数据库、倒排索引和simhash 算法。 本章将摒弃绝大部分的细节,重点谈方法和模式论,且注重用通俗、直白的语 言阐述相关问题。最后,有一点必须强调的是,本章内容是基于面试题的分析基础 进行讲述的,具体实践过程中要视具体情况具体分析,且各个场景下需要考虑的细 节也远比本章所描述的任何一种解决方案复杂得多。 172 第 6 章 海量数据处理 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都内含一个hashtable①,具体关系如图 6-1 所示。 图6-1 set 、map 、multiset 和multimap set 同map 一样,所有元素都会根据元素的键自动排序,因为set 和map 两者的 所有操作都只是转而调用红黑树的操作行为。不过,值得注意的是,两者都不允许 任意两个元素有相同的键。 ① C++ 11 标准之后,准备引入非标准的关联式容器hashtable ,但为了避免与已经存在的hash_map 等第三方 容器的名字产生冲突,命名了基于散列函数实现的unordered_set、unordered_map 和unordered_multiset、 unordered_multimap,分别相当于hash_set、hash_map 和hash_multiset、hash_multimap 。但是,采用哪种名 字不是本书的重点,所以下文在用到无序的关联式容器时,依然会继续沿用旧标准中的hash_set、hash_map、 hash_multiset 和hash_multimap 。 6.1 基础知识:STL 容器 173 不同的是,set 的元素不像map 那样可以同时拥有值和键,set 元素的值就是键, 键就是值,而map 的所有元素都是pair ,同时拥有值和键,pair 的第一个元素被视 为键,第二个元素被视为值。 至于multiset 和multimap ,它们的特性及用法与set 和map 几乎相同,唯一的差 别就是它们允许键重复,即所有的插入操作基于红黑树的 ins

文档评论(0)

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

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

版权声明书
用户编号:5231134344000003

1亿VIP精品文档

相关文档