假设有 N 个数字分组为 K 个不相交的集合。问题是为这些不相交的集合中的每一个创建一个键,以便给定任何数字,对这些键和数字进行简单操作应该能够给出包含该数字的集合。
一种简单的方法及其局限性: 例如。让 N 个数字是 34,35,36….321 让第 1 组由 63,66,77,89,122,222 组成,第 2 组由 53,69,137,230,280,299,300,306 组成,依此类推..
sol: 首先创建一个包含 (321-34=287) 个项目的素数数组。为了为第一组创建一个键,对应于数组中位置 (63-34)、(66-34)、…(222-34) 的素数相乘。现在这个键只能被与集合 1 中的数字对应的素数整除,否则不能整除。所以,给定 77,[if(key1%(primeArray[77-34]==0)],77 属于 set1
但是由于我正在处理大量数据值,因此键不能用 64 位整数表示(而且我不想拆分键)。有没有更好的方法来做到这一点?