- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 编程、语言—Linux一键安装web环境全攻略.pdf
- 编程、语言—MATLAB智能算法30个案例分析.pdf
- 编程、语言—mysql存储过程详解.docx
- 编程、语言—Nginx的负载均衡入门-张宴.ppt
- 编程、语言—nhn公司题库(收录).doc
- 编程、语言—sql面试大全.pdf
- 编程、语言—ZPUCN_ECFDN00004921.pdf
- 编程、语言—大数据取舍之道.pdf
- 编程、语言—构建高效的内存NoSQL数据库.pdf
- 编程、语言—核心php编程.pdf
- 地理-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 历史|湖北元月调考暨湖北省部分市州元月高三期末联考历史试卷及答案.docx
- 历史-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 数学(理科)-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 历史丨金太阳24~239C湖北省十堰市2024届高三上学期1月调研考试历史试卷及答案.docx
- 青岛某高层办公楼地下防水施工方案(sbs卷材).docx
- 土木工程实习报告表格.doc
- 工程流体力学教学课件ppt作者闻建龙工程流体力学习题答案部分.doc
- 围手术期管理制度(1)_0.doc
- 2023年公务员多省联考《申论》题(内蒙古旗县卷)及参考答案.doc
文档评论(0)