Semver的数字和可订购的hashsum

时间:2016-08-19 06:02:36

标签: algorithm math hash semantic-versioning

我正在研究依赖伪半版本号(只使用主号,小号和补丁号)来索引文件的系统。

为了更快地进行比较和查找以及这样做的乐趣,我尝试计算数字"哈希"对于那些版本号。此数字哈希应具有以下属性(以下极端示例):

Hash(1.0.500) < Hash(1.1.0) < Hash(1.3000.0) < Hash(2.0.0)

我已经尝试了各种各样的解决方案,例如加权每个位置或者像这样

 int hash = 17;
 hash = hash * 42 + Major;
 hash = hash * 42 + Minor;
 hash = hash * 42 + Patch;

但所有这些都可以很快达到限制(在乘数或重量之后)

Hash(1.0.1500) > Hash(1.1.0)

我本可以选择一种肮脏的方式去寻找一个大的乘数来避免这种碰撞(并确保最少数量的组合)但我更喜欢选择更清洁的路径

这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您尝试做的是将具有三个组件(按字典顺序排序)的版本号转换为单个自然数,以便保留订单。这不是一个哈希。

如果组件的大小存在上限,则这是微不足道的。只需使用大于最大组件值的乘数。

如果没有这样的上限,那是不可能的。考虑将0.1.0映射到数字N,然后必须将所有版本0.0.x映射到小N的数字,如果存在无限多个则不可能。