【发布时间】:2012-10-27 17:37:01
【问题描述】:
给定 n 个整数 id,我希望将所有可能的 k 个 id 集合链接到一个常数值。我正在寻找一种将集合(例如 {1, 5}, {1, 3, 5} 和 {1, 2, 3, 4, 5, 6, 7})转换为唯一值的方法。
保证:
- n
- id 的顺序无关紧要:{1, 5} == {5, 1}。
- 所有组合都是可能的,但有些可能被排除在外。
- 所有集合和值都是不变的,并且只生成一次。没有删除或插入,没有值更新。
- 一旦生成,唯一发生的操作就是查找。
- 查找将是频繁且单向的(给定集合,查找值)。
- 无需对值进行排序(或以其他方式组织)。
此外,如果“相邻”集合(删除一个 id、添加一个 id、交换一个 id 等)很容易到达,以及“至少包括这个设置”。
有什么想法吗?
【问题讨论】:
-
集合中的值是唯一的吗?使用 Zobrist 散列,或第 i 个素数的乘积。
-
如果我正确理解了这个问题,有 nchoosek(9,99) 个唯一集,它需要大约 2^40 个唯一整数...
-
@Aki:是的,过滤将是主要障碍之一。 (9, 99) 的组合是非常不可能的情况;较高的“k”值只会出现在较低的“n”值中,反之亦然。
-
显然我低估了...... 99 比 9 只是可能的集合之一......还有大约 1000 个,所以实际的集合数量更像是 2^50。跨度>
-
@Aki: (10, 100) 大约为 2^44。再次重申:过滤是一个主要要求,其原因不仅仅是散列。
标签: data-structures hash hashmap