对于我正在研究的项目,我需要一种方法来计算类型为[(int, int)]
的数据结构的唯一整数表示,i。即(非负)整数对的集合。要求是尽管对中的排序很重要,但集合本身对顺序不敏感。经过一些搜索,我相信一个合适的解决方案是使用Cantor配对函数对每对进行编码,并xor
结果。
范围相当小,例如对于该对中的第一个整数为1-700,对于第二个整数为1-10,该列表将包含这些对中的大约5-15个。
如果您认为有更好的解决方案,请告诉我,但是答案“是的,这将有效”也将非常棒:)
答案 0 :(得分:2)
[这个答案假设当你说“独特”时,你的意思是;碰撞是不可接受的。]
如果目标是以某种方式唯一地将任意大小的整数(对)集合映射到单个(合理大小的)整数上,那么答案基本上是“那是不可能的”。这可以通过吸引pigeonhole principle来轻松证明。
如果集合的大小非常有限,并且输入整数的范围非常有限,那么您可以做一些事情。但在一般情况下,我建议为您的顶级问题寻找不同的解决方案。
<强>更新强>
作为一个有效的例子,让我们考虑一下你在问题中添加的参数。 700 * 10 = 7000,因此您需要大约13位来唯一地表示每个可能的对。最多需要15对,总共需要 195位。
现在,如果顺序无关紧要,那么理论上可以降低log2(15!)= 40位。 * 所以从理论上讲,你需要一个 155位<的输出数据类型/ strong>即可。这样易处理吗?
<小时/> *在实践中如何实现这一点是另一个问题......;)