具有唯一结果的两个数字组合的精简算法
Slim algorithm with unique result for combining two numbers
我有一个向量类,它有两个双分量,精度达到小数点后第三位,每秒实例化十亿次。
我也计算过它们的长度。
现在我想把长度存储在内存中,我认为像HashMap/dictionary这样的东西是个好主意,但这意味着我需要一个键。所以我想,为什么不用矢量分量。因为我不能有两个键,我正在寻找一种方法把这两个数字放在一起(顺序显然不重要),并得到一个唯一的结果。
我的一个朋友建议使用MD5,但我认为这可能是多余的(我从来没有想过我会说MD5)。
简单地将两个值连接起来?所以使用128位密钥,前64位是第一个双精度,第二个64位是第二个双精度?
根据你使用的语言,你也可以使用Object/Struct/whatever作为key。
就像你说的,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;
}
但是如果性能很重要,您应该搜索对您的数据类型执行良好的校验和。没有黄金答案。
这里有许多替代方案,它们都很容易实现和测试。您还可以试验校验和的长度,以查看校验和的长度对应用程序的其他部分有何影响(性能方面)。
有点"蛮力",但是如何连接字符串表示?如果你强迫你的数字到小数点后3位,12.23和100.1将是12.230100.100
唯一的缺点是转换为字符串需要很多时间-我认为比DThoughts建议的串联双精度值更多。你可以测试一下
相关文章:
- 组合两个javascript函数
- 在 JS 中组合两个正则表达式
- JavaScript - 需要帮助组合两个脚本
- 使用this和not组合两个jQuery语句
- 使用jQuery组合两个表单输入值
- 在谷歌地图的一个信息框中组合两个标记的内容
- 如何组合两个if语句以使用或运算符
- Angularjs - 组合两个 json 对象
- 如何在 Javascript 中组合两个对象
- 在 JavaScript 中组合两个字符串数组
- 如何在 JavaScript 中组合两个变量
- 创建一个新的数组,通过在jQuery中使用条件迭代来组合两个现有对象
- 如何组合两个文本超链接
- 如何在javascript中组合两个变量,中间有逗号
- 如何组合两个单独的Uint8Array的颜色数据(JPEG)和透明度数据(PNG)
- 如何组合两个 javascript 以包含服务器时间而不是用户时间的 ajax 调用
- 在Openlayers中组合两个OCG过滤器
- 组合两个脚本以在所有浏览器上保存Google图表时出现问题
- API 设计:如何组合两个延迟 jQuery 对象的结果
- 组合两个HTML文件