這與一致的哈希有關,雖然我在概念上理解我需要做什麼,但我很難將其轉換爲代碼。如何在算法上分配密鑰空間?
我想分割一個給定的密鑰空間(比如128位)到相同大小的分區。我想要每個分區的上界(最高鍵)。
基本上,我該如何完成這個?
#define KEYSPACE_BYTE_SIZE 16
#define KEYSPACE_BIT_SIZE (KEYSPACE_BYTE_SIZE * 8)
typedef struct _key
{
char byte[KEYSPACE_BYTE_SIZE];
} key;
key * partition_keyspace(int num_partitions)
{
key * partitions = malloc(sizeof(key) * num_partitions);
// ...
}
編輯:
我想這樣說的另一種方式是:
for (i = 0; i < num_partitions; i++)
{
partitions[i] = ((2^KEYSPACE_BIT_SIZE)/num_partitions) * i;
}
當然,問題是2^128是一個非常數量衆多,且不能被包含在C中的任何一個整數變量中,用來進行數學運算(因此char [16]結構體)。
我真的不想爲此使用大量的庫(或任何庫)。
編輯:
雖然,實際上我在尋找的數字是:
for (i = 0; i < num_partitions; i++)
{
partitions[i] = (((2^KEYSPACE_BIT_SIZE)/num_partitions) * (i + 1)) - 1;
}
謝謝!這是我需要的關鍵。 :) – 2010-05-28 23:37:25
不客氣! :) – tzaman 2010-05-28 23:47:56