【发布时间】:2020-04-27 14:49:34
【问题描述】:
我的数组包含从 0 到 integer.max 值的随机唯一数字。
如何生成唯一的 id/signature(int) 来唯一标识每个数组,而不是搜索每个数组并检查每个数字。
例如
int[] x = {2,4,8,1,88,12....};
int[] y = {123,456,64,87,1,12...};
int[] z = {2,4,8,1...};
int[] xx = {213,3534,778,1,2,234....};
..................
..................
and so on.
每个数组可以有不同的长度,但数字在数组内不重复,可以在其他数组中重复。每个数组唯一的 id 的目的是通过 id 来识别它,以便快速搜索。数组包含组件的 ID,数组的唯一签名/ID 将识别其中包含的组件。
此外,无论数组中值的顺序如何,生成的 id 都应该是相同的。像 {1,5} 和 {5,1} 应该生成相同的 id。
我查找了不同的数字配对方法,但结果数字会随着数组的长度增加到无法放入 int 的程度而增长。
分配给组件的 IDS 可以调整,它们不必是整数序列,只要有合适的数字范围即可。唯一的要求是,一旦为数组(组件 id 的集合)生成了 id,它们就不应发生冲突。如果该数组中的集合发生变化,则可以在运行时生成。
【问题讨论】:
-
贴出你目前尝试过的代码。
-
你希望这个 id 到底在哪里?如果你想要它在数组中,你可以开始添加负数作为第一个数字(例如,第一个数组有 -1,第二个有 -2 等等)
标签: java encryption cryptography wolfram-mathematica