python并行计算:分割键空间,为每个节点提供一个工作范围

python并行计算:分割键空间,为每个节点提供一个工作范围,python,algorithm,cluster-analysis,character-encoding,Python,Algorithm,Cluster Analysis,Character Encoding,我的问题对我来说很难解释,因为我的数学不是很好,但我会尽量说清楚 我正在尝试用python编写一个集群,它将生成给定字符集的单词(即使用小写字母:aaaa、aaab、aaac、…、zzzz),并对它们进行各种操作。 我正在搜索如何计算,给定字符集和节点数,每个节点应该在什么范围内工作(即:node1:aaaa-azzz,node2:baaa-czz,node3:daaa-ezzz,…)。有没有可能制作一个算法来计算这个问题?如果有,我如何在python中实现这个问题 我真的不知道如何做到这一点,

我的问题对我来说很难解释,因为我的数学不是很好,但我会尽量说清楚

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


我真的不知道如何做到这一点,因此非常感谢您提供的任何帮助

任何从字符串计算小整数的方法都适用于集群。例如,使用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

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

您应该能够将单词视为奇怪基数中的数字。例如,假设您将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'。

感谢您的提示,我现在将尝试了解如何具体应用这些概念^^^我不明白如何使用您的代码片段来了解每个节点的“单词范围”,请您更精确一点好吗?这段代码对单词范围一无所知。它获取示例中的一个单词,并确定要将其分配到的节点号。作业不是基于范围的,它显然是随机的。非常感谢,我会看看我是否能用这种方法做我想做的事情