如何从Scala中的集合列表中删除适当的子集?

如何从Scala中的集合列表中删除适当的子集?,scala,graph,Scala,Graph,我有一组整数,如下:{(1,0),(0,1,2),(1,2),(1,2,3,4,5),(3,4)} 我想在Scala中编写一个程序,删除给定列表中某个集合的适当子集,即最终结果是:{(0,1,2),(1,2,3,4,5)} O(n2)解决方案可以通过对照整个列表检查每一组来实现,但这将非常昂贵,并且无法很好地扩展到约100000组。我还考虑过从集合中生成边,删除重复边并运行DFS,但我不知道如何在Scala中实现(更具规模的方式,而不是Java代码中的一对一)。单个元素(集合)只需要与相同大小或

我有一组整数,如下:{(1,0),(0,1,2),(1,2),(1,2,3,4,5),(3,4)}

我想在Scala中编写一个程序,删除给定列表中某个集合的适当子集,即最终结果是:{(0,1,2),(1,2,3,4,5)}

O(n2)解决方案可以通过对照整个列表检查每一组来实现,但这将非常昂贵,并且无法很好地扩展到约100000组。我还考虑过从集合中生成边,删除重复边并运行DFS,但我不知道如何在Scala中实现(更具规模的方式,而不是Java代码中的一对一)。

单个元素(集合)只需要与相同大小或更大的其他元素进行比较

val ss = List(Set(1, 0), Set(0, 1, 2), Set(1, 2), Set(1, 2, 3, 4, 5), Set(3, 4))

ss.sortBy(- _.size) match {
    case Nil => Nil
    case hd::tl =>
      tl.foldLeft(List(hd)){case (acc, s) =>
        if (acc.exists(s.forall(_))) acc
        else s::acc
      }
  }
//res0: List[Set[Int]] = List(Set(0, 1, 2), Set(5, 1, 2, 3, 4))
单个元素(集合)只需与相同大小或更大的其他元素进行比较

val ss = List(Set(1, 0), Set(0, 1, 2), Set(1, 2), Set(1, 2, 3, 4, 5), Set(3, 4))

ss.sortBy(- _.size) match {
    case Nil => Nil
    case hd::tl =>
      tl.foldLeft(List(hd)){case (acc, s) =>
        if (acc.exists(s.forall(_))) acc
        else s::acc
      }
  }
//res0: List[Set[Int]] = List(Set(0, 1, 2), Set(5, 1, 2, 3, 4))

谢谢我花了一些时间才明白,但这是如此简洁明了。谢谢!我花了一些时间才明白,但这是如此简洁明了。