查找给定集合是不是是集合的完美子集的更好方法是啥 - 如果给定子集未排序?
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 表示完美哈希。当然,这可能是矫枉过正且难以维护。以上是关于查找给定集合是不是是集合的完美子集的更好方法是啥 - 如果给定子集未排序?的主要内容,如果未能解决你的问题,请参考以下文章