使用并行计算大幅提升递归算法效率
来源:互联网 发布:软件怎么发布 编辑:程序博客网 时间:2024/05/02 01:16
前言:
无论什么样的并行计算方式,其终极目的都是为了有效利用多机多核的计算能力,并能灵活满足各种需求。相对于传统基于单机编写的运行程序,如果使用该方式改写为多机并行程序,能够充分利用多机多核cpu的资源,使得运行效率得到大幅度提升,那么这是一个好的靠谱的并行计算方式,反之,又难使用又难直接看出并行计算优势,还要耗费大量学习成本,那就不是一个好的方式。
由于并行计算在互联网应用的业务场景都比较复杂,如海量数据商品搜索、广告点击算法、用户行为挖掘,关联推荐模型等等,如果以真实场景举例,初学者很容易被业务本身的复杂度绕晕了头。因此,我们需要一个通俗易懂的例子来直接看到并行计算的优势。
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人学习,我们通过它来发现和运用并行计算的优势,可以得到一个很直观的体会,并留下深刻的印象。问题如下:
请写一个程序,输入M,然后打印出M个数字的所有排列组合(每个数字为1,2,3,4中的一个)。比如:M=3,输出:
1,1,1
1,1,2
……
4,4,4
共64个
注意:这里是使用计算机遍历出所有排列组合,而不是求总数,如果只求总数,可以直接利用数学公式进行计算了。
一、单机解决方案:
通常,我们在一台电脑上写这样的排列组合算法,一般用递归或者迭代来做,我们先分别看看这两种方案。
1) 单机递归
可以将n(1<=n<=4)看做深度,输入的m看做广度,得到以下递归函数(完整代码见附件CombTest.java)
无论什么样的并行计算方式,其终极目的都是为了有效利用多机多核的计算能力,并能灵活满足各种需求。相对于传统基于单机编写的运行程序,如果使用该方式改写为多机并行程序,能够充分利用多机多核cpu的资源,使得运行效率得到大幅度提升,那么这是一个好的靠谱的并行计算方式,反之,又难使用又难直接看出并行计算优势,还要耗费大量学习成本,那就不是一个好的方式。
由于并行计算在互联网应用的业务场景都比较复杂,如海量数据商品搜索、广告点击算法、用户行为挖掘,关联推荐模型等等,如果以真实场景举例,初学者很容易被业务本身的复杂度绕晕了头。因此,我们需要一个通俗易懂的例子来直接看到并行计算的优势。
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人学习,我们通过它来发现和运用并行计算的优势,可以得到一个很直观的体会,并留下深刻的印象。问题如下:
请写一个程序,输入M,然后打印出M个数字的所有排列组合(每个数字为1,2,3,4中的一个)。比如:M=3,输出:
1,1,1
1,1,2
……
4,4,4
共64个
注意:这里是使用计算机遍历出所有排列组合,而不是求总数,如果只求总数,可以直接利用数学公式进行计算了。
一、单机解决方案:
通常,我们在一台电脑上写这样的排列组合算法,一般用递归或者迭代来做,我们先分别看看这两种方案。
1) 单机递归
可以将n(1<=n<=4)看做深度,输入的m看做广度,得到以下递归函数(完整代码见附件CombTest.java)
- public void comb(String str){
- for(int i=1;i<n+1;i++){
- if(str.length()==m-1){
- System.out.println(str+i);
- total++;
- }else
- comb(str+i);
- }
- }
- 使用并行计算大幅提升递归算法效率
- 使用并行计算大幅提升递归算法效率
- 使用并行计算大幅提升递归算法效率
- 大幅提升冲浪效率,搜狗高速浏览器3.0
- 康拓普:数据可视化,大幅提升企业大数据挖掘效率
- 使用递归算法计算阶乘
- 蒙特卡罗算法并行计算
- 如何提升JavaScript的递归效率
- 提升JavaScript递归效率:Memoization技术详解
- 提升JavaScript递归效率:Memoization技术
- 提升JavaScript递归效率:Memoization技术详解
- java算法 使用递归计算阶乘
- IE9安全性大幅提升
- SQLite:关于日期的字段的优化将给Julia带来大幅效率提升
- 熟练使用idea快捷键,大幅提高java开发效率
- 递归与非递归的算法效率
- 递归算法计算n!
- 递归算法计算阶乘
- C语言中一些关键字的作用
- Dynamic Class Loading in Java
- AJAX请求异常代码含义
- 使用vs2010编译CCV1.5
- Photon服务器引擎 入门教程二
- 使用并行计算大幅提升递归算法效率
- git-svn提交修改出错时的恢复办法
- JAVA经典算法40题(18)
- java实现sftp实例
- 嵌入式系统基础
- 黑马程序员 Java初级<二>--->数据、变量与运算
- log4j:ERROR Could not find value for key log4j.appender.CONSOLE
- JAVA 数组复制
- 哈希排序