如何为5个数字的数组生成某种校验和,以区分一组数字?
例如: [1,2,3,4,5]与[2,3,4,5,1]具有相同的校验和
我希望生成数百万个5位数组合,并将它们与预定数字组进行比较。我希望能够对我生成的数据进行校验和,然后将它们与我已生成的数字库进行比较。
让我解释一下:
我考虑过使用md5sum,但是如果内部元素发生变化,那么md5将是相同的。
我可以将数组存储在内存中,但我正在尝试最小化我在内存中存储的数字量
答案 0 :(得分:1)
[1,2,3,4,5].sort.hash #=> 1777030444607087813
[2,3,4,5,1].sort.hash #=> 1777030444607087813
应该使这些集合可以区分。
也应该是一个更友好的解决方案,因为
5.size #=> 8
1777030444607087813.size #=> 8
答案 1 :(得分:1)
哈希问题是你总是需要担心碰撞。这是一种确保每个值都是唯一的方法(并且它甚至是O(N))
require 'prime'
pr = Prime.take(10)
[ 1, 2, 3, 4, 5].map{|x| pr[x]}.reduce(&:*)
=> 15015
[ 2, 3, 4, 5, 1].map{|x| pr[x]}.reduce(&:*)
=> 15015