在ruby中存储一组特定的数字

时间:2016-01-13 22:17:24

标签: ruby

如何为5个数字的数组生成某种校验和,以区分一组数字?

例如:     [1,2,3,4,5]与[2,3,4,5,1]具有相同的校验和

我希望生成数百万个5位数组合,并将它们与预定数字组进行比较。我希望能够对我生成的数据进行校验和,然后将它们与我已生成的数字库进行比较。

让我解释一下:

  • 我创建一个数组数组作为数组
  • 我使用Rand()
  • 在数组中生成6个数字
  • 我将生成的数字与我创建的数组进行比较,如果匹配则退出
  • 如果数字不匹配,请创建一个我可以比较未来数组的哈希值。数组内部数字的排列无关紧要。

我考虑过使用md5sum,但是如果内部元素发生变化,那么md5将是相同的。

我可以将数组存储在内存中,但我正在尝试最小化我在内存中存储的数字量

2 个答案:

答案 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