IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 浅析Google云计算 -> 正文阅读

[数据结构与算法]浅析Google云计算

目录

什么是云计算

Google云计算

分治算法的原理

从分治算法到MapReduce

以矩阵乘法为例

结语


什么是云计算

云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。

现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。

Google云计算

云计算技术涉及的面很广,从存储、计算、资源的调度到权限的管理等,云计算的一个关键问题是,如何把一个非常大的计算问题,自动分解到许多计算能力不是很强大的计算机上,共同完成。Google 针对这个问题给出的解决工具是一个叫 MapReduce 的程序,其根本原理就是计算机算法上很常见的分治(Divide-and-Conquer)算法。

分治算法的原理

在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范型。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(归并排序、快速排序)、傅立叶变换(快速傅立叶变换)。

从分治算法到MapReduce

熟悉计算机算法的读者都知道归并排序(Merge Sort)的原理。假定要对一个长度为N的数组a_{1},a_{2},a_{3},...,a_{N}进行排序,如果采用对a_{i}?和a_{j};两两比较的办法(冒泡排序),时间复杂度是O(N^{^{2}}),不仅非常笨(慢)。而且如果数组过大(比如几千亿个元素),也无法在一台计算机上完成。

而使用分治算法,是将这个大数组分为几份,比如一分为二,对每一半分别进行排序。当这两个子数组排序完毕后,把它们从头到尾合并,得到原来数组的排序结果。对应的大小正好是原数组一半大,只需要进行1/4的比较即可。

当然,合并的过程需要一些额外的时间,但是和省下的时间相比可以忽略不计。同理,还可以对前后每一半子数组继续分解成更小的子数组。直到子数组中只有两个元素。这种做法大大缩短了整个排序的时间,由原来的O(N^{2})简化到O(N\cdot logN),如果N是一百万,那么计算时间将缩短一万倍。这个排序算法在每个子任务完成后,都要进行合并,归并排序算法也因此得名。

感兴趣的读者可以去了解一下冒泡排序归并排序算法

以矩阵乘法为例

如果一台服务器存不下整个大数组,这件事就变得很麻烦。好了,让我们看看分治算法怎么做。首先,把矩阵A按行拆成10个小矩阵A1,A2,...,A10,每一个有N/10行。

分别计算每个小矩阵A1,A2,…,A1和B的乘积,不失一般性,以A1来说明:
?

?

同理,可以在第二台、第三台、……服务器上计算出其他元素。当然,矩阵B和矩阵A一样大时,一台服务器同样存不下。不过没有关系,同样可以按列切分矩阵B,使得每台服务器只存矩阵B的1/10。上述公式可以直接使用,只是这回只完成了C1的1/10。

因此,这次需要100 台服务器而不是原来的10台,于是,在单机上无法求解的大问题就被分解成小问题得以解决。

在上面的例子中,增加了服务器的数量,但是每个元素c_{n,m}的绝对计算时间其实并没有减少(这点不像归并排序)。但是在某些应用中,增加服务器数量可以带来绝对计算时间的减少。例如,只是要得到C中某个特定元素c_{n,m}而不是整个C矩阵,这种需求在链接分析或者日志处理中有时会遇到,假如希望通过10倍的机器能够缩短计算时间。这个需求也可以通过分治算法来实现,具体解决方法如下:
对矩阵A按行切分,对矩阵B按列切分。A1是A的前十分之一行,A2是接下来的十分之一,等等,对B也是如此。然后用同样的方法计算得到10 个中间结果c_{nm}^{1},...,c_{nm}^{10}。而c_{n,m}只是这10个数字相加的结果。下面每个结果的计算量都是最后结果的十分之一。这样,我们就用10倍的计算机数量将计算时间缩短了10倍。

这就是MapReduce的根本原理。将一个大任务拆分成小的子任务,并且完成子任务的计算,这个过程叫做Map,将中间结果合并成最终结果,这个过程叫做Reduce。当然,如何将一个大矩阵自动拆分,保证各个服务器负载均衡,如何合并返回值,就是MapReduce 在工程上所做的事情了。
?

结语

我们现在可以发现 Google 颇为神秘的云计算中最重要的 MapReduce 工具,其实原理就是计算机算法中常用的"各个击破"法,它的原理原来这么简单 ——将复杂的大问题分解成很多小问题分别求解,然后再把小问题的解合并成原始问题的解。由此可见,在生活中大量用到的,真正有用的方法往往简单而又朴实


云计算技术现在已经广泛应用于人类生活中的角角落落,是计算机时代的优秀产物,在与大数据、物联网、人工智能等技术的结合中,不断推进着IT行业蒸蒸日上,掀起了信息时代的又一波高潮。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:05:02  更:2021-10-04 13:07:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:33:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码