algorithm - 搜索分布式算法来分发一些对象

标签 algorithm computer-science implementation distribution distributed-computing

我正在寻找一种算法来解决以下问题:

n 个软件组件可以通过多播进行通信。此外,还有一个包含 m 对象的池。每个 sw 组件都知道该池包含什么。 对象具有不同的值。根据我想将对象分发给 sw 组件的值。这意味着:必须优先选择具有较大值(value)的对象,必须忽略具有较低值(value)的对象(例如,当所有 sw 组件不能接受更多对象时)。

非常重要的一点是,任何对象都不会被分发超过一次。当一个对象分配给一个 sw 组件时,它不得分配给另一个 sw 组件。

此外,我想将整个事情实现为分布式算法,这意味着没有执行该分配的中央单元。

有什么想法吗?

最佳答案

  1. 一个解决方案是实现互斥算法(一个非常简单的算法是面包店算法),每个 sw 在轮到它时获取最高的对象。 (这就像写入文件的互斥)
  2. 另一个会涉及节点之间的大量通信。让我们假设 N>=M 的一般情况。假设每个 sw 采用 n/m 个组件,然后他采用最高值并将其余 x 个组件多播到 x sw,但附加值是这些组件 *cast 的最大值。然后,接收方将查看它们的值是否大于接收到的值,并将交换它并从列表中删除该值但插入它;旧值。然后它将计算出最大值的组件转换为相同的 x sw 组件。这个想法是 sw 的集合 X 将相互通信,直到每个节点都有不同的值。您将拥有一些这样的 X 套装。当然,必须改进该算法,使每个 sw 都有不同的值,并证明这会发生,这样您就可以确定。

但是您想要和想法,所以我给了您 2 个。希望对您有所帮助。 该算法的实现将在 OpenMPI 中(使用 C 或 C++)。至少我在 OpenMPI 中实现了我的分布式算法(和 Lam MPI,但现在它已经过时了)。

关于algorithm - 搜索分布式算法来分发一些对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11375879/

相关文章:

java - 如何在java中的二叉树上实现深度优先搜索(DFS)?

algorithm - 什么是最严格的渐近增长率

javascript - 如何在javascript中取消嵌套这个递归算法?

git - 为什么 `git update-ref -d`不删除空的父目录?

c - 在 C 中显示文件的所有者名称

c++ - 如何迭代地获取具有重复元素的排序旋转数组中的枢轴点?

c++ - 如何相对于其他元素过滤 vector 元素?

windows - 登录历史记录和操作系统安装日期

R 包含组合生成

C++ - 模板类中模板函数的单独声明/定义