使用Erlang查找包含K进程的列表中的最大元素?

Jay*_*ayX 4 erlang

使用单个进程很容易实现算法,但是,如何使用多个进程来完成工作?

这是我到目前为止所做的.

 find_largest([H], _) -> H;
 find_largest([H, Q | T], R) ->
     if H > Q -> find_largest([H | T], [Q | R]);
       true -> find_largest([Q | T], [H | R])
 end.
Run Code Online (Sandbox Code Playgroud)

谢谢

YOU*_*LID 5

鉴于Erlang如何表示列表,尝试并行执行并不是一个好主意.对列表进行分区意味着需要进行大量复制(因为它们是链接列表),并且将这些分区发送到其他进程也是如此.我希望比较比将所有内容复制两次然后合并结果要便宜得多.

实现也不正确,你可以在lists.erl中找到一个好的,作为max/1

%% max(L) -> returns the maximum element of the list L

-spec max([T,...]) -> T.

max([H|T]) -> max(T, H).

max([H|T], Max) when H > Max -> max(T, H);
max([_|T], Max)              -> max(T, Max);
max([],    Max)              -> Max.
Run Code Online (Sandbox Code Playgroud)

如果您的数据有可能已经在单独的进程中,只需获取列表:max/1或每个列表并将它们发送到一个地方,然后获取列表:结果列表的max/1.您也可以在收到结果时进行比较,以避免构建此中间列表.