Mathematica的HASH没附加参数时是什么算法啊
按帮助给的附加参数,会启动JAVA进程。本来想减少点麻烦就用默认算法,结果碰撞得一塌糊涂。"Adler32" Adler 32 位循环冗余码校验
"CRC32" 32 位循环冗余码校验
"MD2" 128 位 MD2 编码
"MD5" 128 位 MD5 编码
"SHA" 160 位 SHA-1 编码
"SHA256" 256 位 SHA 编码
"SHA384" 384 位 SHA 编码
"SHA512" 512 位 SHA 编码 关于Hash函数,Mathematica文档没有说明默认的算法是啥。闭源的软件,没有文档明确说明的东西随时都会改动。版本之间不承诺兼容。
至于你说的碰撞的一塌糊涂 可否陈述一下具体的细节。
通过类似 ListPlot, {i, 1000}]] 的代码是否能看出问题? 搜了下,stackoverflow的两篇答案,说明这个信息确实是缺失的。
https://stackoverflow.com/questions/4039538/what-is-the-default-hash-code-that-mathematica-uses
https://mathematica.stackexchange.com/questions/68954/default-behaviour-of-hashexpr-and-hashing-in-different-versions-of-mathematica wayne 发表于 2017-9-28 17:00
关于Hash函数,Mathematica文档没有说明默认的算法是啥。闭源的软件,没有文档明确说明的东西随时都会改动 ...
我要优化一个10G规模的代数式。各个“零件”就想用HASH命名,结果严重错误。排查最后发现是默认Hash的问题,改SHA-1就跑通了。
跑三晚两夜的程序,不想再跑一遍找那十对碰撞的代数式了。 zeroieme 发表于 2017-9-28 19:28
我要优化一个10G规模的代数式。各个“零件”就想用HASH命名,结果严重错误。排查最后发现是默认Hash的问 ...
从上面的第二个链接看, hash在64位机器上默认使用了FNV-1方法。该hash方法实现非常容易。
https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
=====================================================================
很好奇这么大的规模,怎么会想到用Mathematica来做 wayne 发表于 2017-9-28 19:35
从上面的第二个链接看, hash在64位机器上默认使用了FNV-1方法。该hash方法实现非常容易。
https:// ...
积分啊,把RootSum初等化啊。慢慢就涨到这么大了。还好压缩回3M了。
-----
顺便问问,你试过树莓派集群吗?
页:
[1]