Erlang的算法-(一)递归快速排序和MapReduce分布式的快排

本文探讨了如何使用Erlang的MapReduce方法实现快速排序算法,包括Map阶段将原始数据转化为中间结果,以及Reduce阶段整合这些结果以得出最终排序。通过示例代码展示了分布式计算在快速排序中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Erlang的作者Joe Armstrong发表了一段代码来表示MapReduce版本的Erlang标准lists:map/2方法
Map阶段:在这个阶段,通过Map过程,将原始数据列表,处理成中间数据,用于Reduce过程的处理
Reduce阶段:将Map阶段产生的中间数据综合归纳成输出结果

先看看下面这段代码,实现了lists:map/2的分布式计算

-module(pmap).
-export([pmap/2]).

pmap(F, L) ->
    S = self(),
    Pids = lists:map(fun(I) ->
        spawn(fun() -> do_fun(S, F, I) end)
    end, L),
    gather(Pids).

%% Reduce
gather([]) -> [];
gather([H|L]) ->
    receive
        {
   H, Result} -> [Result|gather(L)]
    end.

%% Map = F,F(I)生成MapResult中间结果
do_fun(Parent, F, I) -> 
    Parent ! {
   self(), (catch F(I))}.

扩展一下应用到我们快排中,代码如下:

-module(map_reduce).
-export([map_reduce/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值