Math 为给定数量的整数生成唯一值的对函数

Math 为给定数量的整数生成唯一值的对函数,math,mapping,unique,Math,Mapping,Unique,我有不同的整数集,每组可以有2到>10个整数,值在0到500ish之间(变量)。我想把它们配对成一个唯一的数字。 我已经探索了康托配对函数,但我必须一次组合两个数字,对于更长的数字组,很快就会产生非常大的数字 例如: 集合1:[1,12,65,4]将映射到与集合2:[1,12,65,2]不同的唯一值 另外,另一个很好的要求是集合[1,4,78,5]和[1,4,78,10]在用唯一的数字表示时彼此接近 这在数学上可能吗?我认为cantor元组函数可能是一个解决方案。在此之前,对集合的编号进行排序,

我有不同的整数集,每组可以有2到>10个整数,值在0到500ish之间(变量)。我想把它们配对成一个唯一的数字。 我已经探索了康托配对函数,但我必须一次组合两个数字,对于更长的数字组,很快就会产生非常大的数字

例如: 集合1:[1,12,65,4]将映射到与集合2:[1,12,65,2]不同的唯一值

另外,另一个很好的要求是集合[1,4,78,5]和[1,4,78,10]在用唯一的数字表示时彼此接近


这在数学上可能吗?

我认为cantor元组函数可能是一个解决方案。在此之前,对集合的编号进行排序,然后传递给

通过这种方式,您将获得每个集合的唯一结果,并且不知何故,它可以满足不错的需求(不是最好的,但可以作为解决方案)


我认为cantor元组函数可能是一个解决方案。在此之前,对集合的编号进行排序,然后传递给

通过这种方式,您将获得每个集合的唯一结果,并且不知何故,它可以满足不错的需求(不是最好的,但可以作为解决方案)


如果我正确理解了你的问题,你需要一个内射函数R^n->R。是的,这是绝对可能的

最简单的解决办法就是把数字串在一起。例如,对于[1,12,65,4],每个数字都可以表示为[001012065004],您可以将其映射到1012065004。它还具有接近[1,12,65,2]>1012065002的特性

另一个解决方案是“交织”数字。例如,如果您有[abc,def]->adbecf。所以对于[1,12,65,4]->[001012065004]->'000001601254'->1601254。这将导致较小的值


一旦你有了这个内射函数,你就可以用另一个内射函数R->R(例如f(x)=log x)来组合它,使值对于你的应用程序来说不会太大。

如果我正确理解了你的问题,你需要一个内射函数R^n->R。是的,这是绝对可能的

最简单的解决办法就是把数字串在一起。例如,对于[1,12,65,4],每个数字都可以表示为[001012065004],您可以将其映射到1012065004。它还具有接近[1,12,65,2]>1012065002的特性

另一个解决方案是“交织”数字。例如,如果您有[abc,def]->adbecf。所以对于[1,12,65,4]->[001012065004]->'000001601254'->1601254。这将导致较小的值


一旦你有了这个内射函数,你就可以用另一个内射函数R->R(例如f(x)=logx)来组合它,以使值对于你的应用程序来说不会太大。

10个数字加上500个可能的值,得到大约1个八亿序列(假设顺序很重要)。这需要约90位完美的包装。这在你想象的范围内吗?或者你需要32/64位范围的东西吗?顺序其实并不重要,很好。是的,我需要这个数字是一个图的轴之一,这样,具有公共整数的集合彼此更接近。所以它不可能大到。。。我应该早就说了。谢谢这仍然是大约68位不同组合的值。如果你真的需要独特性和紧凑性,这似乎很难实现。映射到空间填充曲线(例如or)可能是其他方法。10个具有500个可能值的数字给出大约1个八亿序列(假设顺序很重要)。这需要约90位完美的包装。这在你想象的范围内吗?或者你需要32/64位范围的东西吗?顺序其实并不重要,很好。是的,我需要这个数字是一个图的轴之一,这样,具有公共整数的集合彼此更接近。所以它不可能大到。。。我应该早就说了。谢谢这仍然是大约68位不同组合的值。如果你真的需要独特性和紧凑性,这似乎很难实现。映射到空间填充曲线(例如或)可能是其他方法。谢谢!我曾想过把数字串起来,然后拿着圆木,但这种交织的想法简直就是天才。我将尝试这种方法再次感谢!谢谢我曾想过把数字串起来,然后拿着圆木,但这种交织的想法简直就是天才。我将尝试这种方法再次感谢!