Logic 组合两个唯一编号(顺序无关紧要)以创建唯一编号

Logic 组合两个唯一编号(顺序无关紧要)以创建唯一编号,logic,algebra,Logic,Algebra,我正在创建一个网站,从117个项目中选择两个,并以不同的方式进行比较。我需要一种方法来为每个匹配分配一个唯一的编号,这样它们就可以轻松地存储在数据库中。我见过配对函数,但找不到顺序无关紧要的函数。例如,我希望2和17的唯一数字与17和2相同。是否有一个方程式可以满足这个要求?这取决于您使用的编程语言 例如,在Java中,这将非常容易,因为相同的种子产生相同的随机数序列。所以你可以简单地使用两个随机数的和 Long seed = 2L + 17L; Long seed2 = 17L+2L;

我正在创建一个网站,从117个项目中选择两个,并以不同的方式进行比较。我需要一种方法来为每个匹配分配一个唯一的编号,这样它们就可以轻松地存储在数据库中。我见过配对函数,但找不到顺序无关紧要的函数。例如,我希望2和17的唯一数字与17和2相同。是否有一个方程式可以满足这个要求?

这取决于您使用的编程语言

例如,在Java中,这将非常容易,因为相同的种子产生相同的随机数序列。所以你可以简单地使用两个随机数的和

 Long seed = 2L + 17L;
 Long seed2 = 17L+2L;
 Random random = new Random(seed);
 Random random2 = new Random(seed2);

 Boolean b = (random.nextLong() == random2.nextLong()) //true
但是,对于
1+18
0+19
等等,这也会返回相同的值-无论加起来是19

所以,要得到真正唯一的数字“每对”,你需要移动其中一个。即,有117个条目,您可以将较小的(或较大的)乘以1000:

然后你有一个唯一的2,17和17,2的随机数-但是19,0或0,19会产生一个不同的随机数


注:如果它总是返回相同的2,19-结果不是一个真正的随机数,不是吗?

我知道这个问题的日期是2014年,但我仍然想添加以下答案。 你可以用素数的乘积来做这个。例如,如果一对是(2,4),则可以使用第二个素数(=3)和第四个素数(=7)的乘积作为id(=3*7=21)

为了在117个可能的组合中实现这一点,您需要预先计算所有前117个素数,并将它们存储在数组或哈希表中,然后执行如下操作(在JavaScript中):


请注意,如果您也想解码它们,事情会变得更加困难,因为你需要计算你的id的素数分解。

确定两个值中哪一个更小,并交换它们,例如,最小的总是第一个,这通常非常容易实现。@Damien_不信者嗯,我没有想到这一点。这似乎能解决我的问题。谢谢“结果不是一个真正的随机数”——既然OP在他们的问题中根本没有使用“随机”这个词,我想知道你为什么在回答中如此关注随机性?
Long seed = 2L * 1000 + 17L;
....
var primes = [2,3,5,7,...];
var a = 2;
var b = 17;
var id = primes[a-1]*primes[b-1];