递归数据效率低怎么办?用并行计算!

开发
对于比较复杂的互联网应用业务场景,由于数据量极大,对于数据处理的速度会要求非常高。要大幅提升算法的效率,最直接的方法就是:使用并行计算。但是,并行计算的学习成本较高,我们需要一个通俗易懂的例子来直接看到并行计算的优势。下面,淘宝网高级专家千峰就编写了这样的一个例子,51CTO受邀将这篇文章分享给大家。

 

对于比较复杂的互联网应用业务场景,比如海量数据商品搜索、广告点击算法、用户行为挖掘、关联推荐模型等等,由于数据量极大,对于数据处理的速度会要求非常高。要大幅提升算法的效率,最直接的方法就是:使用并行计算。

但是,并行计算有一个很大的问题:传统的程序都是基于单机编写的。要更改为多机并行的程序,需要耗费较大的学习成本。尤其在真实的场景当中,业务本身很复杂,初学者一头扎进去,容易绕晕了头。

因此,我们需要一个通俗易懂的例子来直接看到并行计算的优势。

下面,淘宝网高级专家千峰就编写了这样的一个例子,51CTO受邀将这篇文章分享给大家。

文章概述

问题:

请写一个程序,输入M,然后打印出M个数字的所有排列组合(每个数字为1,2,3,4中的一个)。比如:M=3,输出:

1,1,1
1,1,2
……
4,4,4

共64个

注意:这里是使用计算机遍历出所有排列组合,而不是求总数,如果只求总数,可以直接利用数学公式进行计算了。

传统的单机解决方案:

1)单机递归

将n(1<=n<=4)看做深度,输入的m看做广度。当m数字很大时,会超出单台机器的计算局限导致缓慢。

2)单机迭代

求m个数字的排列组合,实际上都可以在m-1的结果基础上得到。但是,当m=14的时候,结果已经上亿了。无论以什么格式存,最终在单机上都会内存溢出。

分布式并行计算解决方案:

1)多机递归

这是本篇文章的重点。

核心思想:重新设计算法,按多机进行拆分和合并,利用并行计算优势去完成结果。

按照并行计算的算法,n台计算机可以将递归降一级,n*n台计算机可以将递归降两级。理论上,只要机器足够多,就能持续降低递归的复杂度。

运行步骤:

多机递归

使用fourinone框架设计分布式并行计算。整个框架通过一个ParkServerDemo做整体的工人注册和分布式协调,中间有作为包工头的CombCtor(分配工作+统计结果),最下面有多个CombWorker作为工人实现(干活儿+返回结果)。

文中有多机递归实现的完整代码。

2)多机迭代

本文提供了三个多机迭代的思路。相对多机递归的方式,多机迭代的方式在这个例子中并不高效,因此没有提出实现方式。

对这篇文章感兴趣,可点击这里查看全文

 

责任编辑:yangsai 来源: 作者投递
相关推荐

2010-04-21 09:23:09

.NET 4

2010-03-22 14:45:40

云计算

2017-04-24 12:07:44

Spark大数据并行计算

2021-06-01 05:51:37

云计算并行计算分布式计算

2011-04-20 17:15:21

并行计算

2009-12-18 09:38:27

.NET 4.0并行计

2011-04-21 09:13:14

并行计算

2012-08-17 09:32:52

Python

2014-04-24 10:25:15

2010-03-19 17:23:45

云计算

2020-12-18 09:23:41

KubernetesDocker

2019-04-18 09:15:05

DaskPython计算

2014-01-21 11:16:59

MPI并行计算

2020-03-23 10:42:56

团队协作阿里

2010-03-11 15:23:44

Visual Stud

2010-06-10 08:37:04

并行计算

2011-08-29 10:40:02

浪潮英特尔并行计算

2015-08-12 10:20:47

2022-02-09 12:11:57

数据丢失数据恢复硬盘

2021-01-05 10:48:38

RedisAOF日志RDB快照
点赞
收藏

51CTO技术栈公众号