1

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

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

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

4

2 回答 2

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

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

于 2010-03-21T21:01:05.400 回答
1

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

于 2010-03-22T03:33:33.767 回答