Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 组合两个数的具有唯一结果的Slim算法_Javascript_Math_Hash - Fatal编程技术网

Javascript 组合两个数的具有唯一结果的Slim算法

Javascript 组合两个数的具有唯一结果的Slim算法,javascript,math,hash,Javascript,Math,Hash,我有一个向量类,有两个双分量,精度高达小数点后第三位,每秒实例化10亿次。 我计算它们的长度的次数也差不多。 现在我想把长度存储在内存中,我认为像HashMap/字典这样的东西是个好主意,但这意味着我需要一个键。所以我想:为什么不使用向量分量呢。因为我不能有两个键,所以我正在寻找一种方法将这两个数字组合在一起(顺序显然不重要),并得到一个唯一的结果 我的一个朋友建议使用MD5,但我认为这可能有点过分(我从没想过我会这样说MD5)。简单地将这两个值连接起来?所以使用128位键,前64位是第一个双精

我有一个向量类,有两个双分量,精度高达小数点后第三位,每秒实例化10亿次。
我计算它们的长度的次数也差不多。

现在我想把长度存储在内存中,我认为像HashMap/字典这样的东西是个好主意,但这意味着我需要一个键。所以我想:为什么不使用向量分量呢。因为我不能有两个键,所以我正在寻找一种方法将这两个数字组合在一起(顺序显然不重要),并得到一个唯一的结果


我的一个朋友建议使用MD5,但我认为这可能有点过分(我从没想过我会这样说MD5)。

简单地将这两个值连接起来?所以使用128位键,前64位是第一个双精度键,第二个64位是第二个双精度键

根据您使用的语言,您也可以使用对象/结构/任何东西作为键


不过,您的内存使用量将是巨大的。

只是将这两个值串联起来?所以使用128位键,前64位是第一个双精度键,第二个64位是第二个双精度键

根据您使用的语言,您也可以使用对象/结构/任何东西作为键


不过,您的内存使用量将是巨大的。

正如您所说,md5感觉相当多余。有很多简单的散列函数,例如,XOR散列对于低级的东西来说是很常见的

unsigned xor_hash ( void *key, int len )
{
    unsigned char *p = key;
    unsigned h = 0;
    int i;

    for ( i = 0; i < len; i++ )
        h ^= p[i];

    return h;
}
无符号异或散列(void*键,int len)
{
无符号字符*p=键;
无符号h=0;
int i;
对于(i=0;i
但是,如果性能很重要,您应该搜索对您的数据类型性能良好的校验和。没有黄金答案


有很多替代方案,它们都很容易实现和测试。您还可以测试校验和的长度,看看校验和的长度对应用程序其他部分的影响有多大(性能方面)。

正如您所说,md5感觉太过分了。有很多简单的散列函数,例如,XOR散列对于低级的东西来说是很常见的

unsigned xor_hash ( void *key, int len )
{
    unsigned char *p = key;
    unsigned h = 0;
    int i;

    for ( i = 0; i < len; i++ )
        h ^= p[i];

    return h;
}
无符号异或散列(void*键,int len)
{
无符号字符*p=键;
无符号h=0;
int i;
对于(i=0;i
但是,如果性能很重要,您应该搜索对您的数据类型性能良好的校验和。没有黄金答案


有很多替代方案,它们都很容易实现和测试。您还可以试验校验和的长度,以了解校验和的长度对应用程序其他部分的影响(性能方面)。

有点“蛮力”,但连接字符串表示如何?如果将数字强制设置为小数点后3位,则12.23和100.1将为12.230100.100


唯一的缺点是转换为字符串需要很多时间——我认为这比DThoughts建议的将双值串联起来要多。您可以对此进行测试。

有点“蛮力”,但是连接字符串表示如何?如果将数字强制设置为小数点后3位,则12.23和100.1将为12.230100.100


唯一的缺点是转换为字符串需要很多时间——我认为这比DThoughts建议的将双值串联起来要多。你可以测试一下。

向量中的数字是什么类型?“把这两个数字放在一起”这是二维向量?向量中的数字是什么类型?“把这两个数字放在一起”这是二维向量?