1

数学が得意ではないので、私の質問は説明するのがかなり複雑ですが、できるだけ明確にしようとします。

私はPythonでクラスターをコーディングしようとしています。これは、文字セットを指定して単語を生成し(つまり、小文字:aaaa、aaab、aaac、...、zzzz)、それらに対してさまざまな操作を行います。文字セットとノード数を考慮して、各ノードがどの範囲で動作するかを計算する方法を探しています(つまり、node1: aaaa-azzz、node2: baaa-czzz、node3: daaa-ezzz、...)。これを計算できるアルゴリズムを作成することは可能ですか?もしそうなら、どうすればこれをPythonで実装できますか?

私は本当にそれを行う方法がわからないので、どんな助けでも大歓迎です

4

2 に答える 2

1

文字列から小さな整数を計算できる方法は、クラスタリングには問題ありません。たとえば、md5 でハッシュを計算し、その 1 バイトを調べます。

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 に答える