- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 浙江大学高等有机真题2.pdf
- 海信DL-5011维修手册.pdf
- 海上风电发展概况.pdf
- 海上风电场的选址.pdf
- 海关实务第四章.pdf
- 浪潮英信服务器NF190用户手册.pdf
- 海亮城市广场商业招商工作汇报.pdf
- 海伦堡屋面防水工程技术标准及要求.pdf
- 海关特殊监管区域的管理.pdf
- 海南项目仪表施工方案(好).pdf
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
文档评论(0)