【问题标题】:python parallel computing: split keyspace to give each node a range to work onpython并行计算:拆分键空间给每个节点一个工作范围
【发布时间】:2011-01-30 03:03:45
【问题描述】:

我的问题解释起来相当复杂,因为我数学不是很好,但我会尽量讲清楚。

我正在尝试在 python 中编写一个集群,它将生成给定字符集的单词(即小写:aaaa、aaab、aaac、...、zzzz)并对它们进行各种操作。 我正在搜索如何计算,给定字符集和节点数,每个节点应该在什么范围内工作(即:node1:aaaa-azzz,node2:baaa-czzz,node3:daaa-ezzz,...)。是否有可能制作一个可以计算它的算法,如果可以,我如何在 python 中实现它?

我真的不知道该怎么做,所以任何帮助将不胜感激

【问题讨论】:

标签: python algorithm cluster-analysis character-encoding


【解决方案1】:

任何可以从字符串中计算出小整数的方法都可以用于聚类。例如,使用 md5 计算哈希,并查看其中的一个字节:

import hashlib

s = "aaac"
num_nodes = 5 # or whatever
m = hashlib.md5(s)
node = ord(m.digest()[0]) % num_nodes

print node  # prints 2

这不能保证均匀分布所有字符串,但会很接近。

【讨论】:

  • 我不明白如何使用你的代码来知道给每个节点的“单词范围”,你能更准确吗?
  • 这段代码对单词范围一无所知。它需要一个单词(示例中的 s),并确定一个节点号来分配它。分配不是基于范围,它显然是随机的。
【解决方案2】:

您应该能够将您的单词视为具有奇怪基础的数字。例如,假设您有 a..z 作为您的字符集(26 个字符)、4 个字符串,并且您希望在 10 台机器上平均分配。那么一共有26^4个字符串,所以每台机器得到26^4/10个字符串。第一台机器将获取字符串 0 到 26^4/10,接下来是 26^4/10 到 26^4/5,等等。

要将数字转换为字符串,只需使用您的字符集作为数字以 26 为基数写入数字。所以 0 是 'aaaa' 而 26^4/10 = 2*26^3 + 15*26^2 + 15*26 +15 是 'cppp'。

【讨论】:

  • 非常感谢,我看看能不能用这个方法做我想做的事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2019-09-22
  • 2013-08-09
相关资源
最近更新 更多