这与一致的哈希有关,虽然我在概念上理解我需要做什么,但我很难将其转换为代码。如何在算法上分配密钥空间?
我想分割一个给定的密钥空间(比如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