查找给定集合是不是是集合的完美子集的更好方法是啥 - 如果给定子集未排序?

Posted

技术标签:

【中文标题】查找给定集合是不是是集合的完美子集的更好方法是啥 - 如果给定子集未排序?【英文标题】:What is the better approach to find if a given set is a perfect subset of a set - If given subset is not sorted?查找给定集合是否是集合的完美子集的更好方法是什么 - 如果给定子集未排序? 【发布时间】:2010-05-24 18:32:39 【问题描述】:

找出给定集合(未排序)是否是主集合的完美子集的最佳方法是什么。我必须在我的程序中进行一些验证,在那里我必须将客户端请求集与注册的内部能力集进行比较。

我想通过对内部能力集进行排序(一旦注册就不会改变)并对客户端请求集中的每个元素进行二进制搜索。这是我能得到的最好的吗?我怀疑可能有更好的方法。

有什么想法吗?

问候,

微内核

【问题讨论】:

集合的元素是整数/字符串/只是一些定义相等的随机对象吗? @Moron 它们是整数。 【参考方案1】:

假设您选择的语言没有像 Java 对 HashSet 那样实现具有“包含在集合中”方法的集合类...

一个好的方法是使用哈希映射(又名哈希又名关联数组)

如果您的超集不是太大,请生成一个哈希图,将较大集中的每个对象映射到一个真值。

然后,循环遍历子集中的每个元素。尝试在生成的 hashmap 中查找元素。 如果你失败了,你的小集合就不是一个人的子集。如果你完成循环而没有失败,那就是。

【讨论】:

【参考方案2】:

这取决于你的集合中有多少元素。 对于更大的集合,通常使用 Hashset 作为主集,结果是最好的性能。

【讨论】:

【参考方案3】:

由于您知道内部功能集,您可以使用perfect hash function 来测试客户端请求集的元素。

【讨论】:

+1 表示完美哈希。当然,这可能是矫枉过正且难以维护。

以上是关于查找给定集合是不是是集合的完美子集的更好方法是啥 - 如果给定子集未排序?的主要内容,如果未能解决你的问题,请参考以下文章

确保集合新颖性的有效方法

如何证明一个集合是另一个集合的子集

List集合中subList()方法带的2个参数是啥意思

递归确定是不是存在与给定 int 参数匹配的正 int 数组的子集和?

傻瓜方法求集合的全部子集问题(java版)

算法—— 集合的子集