algorithm - 高效的并行握手(组合)

标签 algorithm parallel-processing combinatorics

虽然我经常编写并行程序,但我遇到了制作具有 2 个值的唯一组的问题。换句话说,这是握手问题,每个人都必须与其他人握手。握手后,所有参与者都会共进晚餐。

我知道有两种方法可以做到这一点:

  1. 给所有的人编号,并为每个人编号,每个人将与编号较小的人握手。在最后一个号码的人要求大家握手之前,晚餐会变冷。

  2. 我们会告诉每个人有多少参与者,并根据该值创造条件,这样每个人都会摇一摇。平行的手数相等。晚餐会很冷,因为参与者的数学不好。 (在这种情况下,人们可以像其他人一样行事)

我们也可以用 man 交换数字,用 shaking 交换比较、乘法等。问题是我们想在天冷之前吃晚餐,等待一个线程或设置很多条件会减慢进程。

还有其他更有效的方法吗?

最佳答案

我不确定您在多大程度上受到“数学不好”的限制,但您可以看看 How to automatically generate a sports league schedule , 好的答案是指 http://en.wikipedia.org/wiki/Round-robin_tournament .

在计算同步原语的效率时,您需要分别跟踪等待滞后进程 catch 进度所花费的时间,以及同步本身所花费的时间。如果你的时间实际上是在等待落后者 catch 来,你需要加快他们的速度(例如,通过更均匀地分配工作)或避免等待他们的必要性 - 在每个人都等待其他人之后加快发生的事情可能帮助不大。

关于algorithm - 高效的并行握手(组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333294/

相关文章:

python - 运行 Python 时在进程之间交换对象

cuda - NVIDIA GPU 的 CUDA 核心和 OpenCL 计算单元之间有什么关系?

python - 如何生成最大步长为 1 的所有非递减序列?

julia - 在 Julia 中排序的两个数组的组合

c - 有没有办法优化这种数据的排序?

arrays - 一次仅删除一个元素后,查找从父数组产生的已排序数组的数量

java - 大 O 符号和带循环的递归

Java冒泡排序算法实现

python - 函数内部多处理 scipy 优化的奇怪行为

algorithm - 列表集的规范形式