加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何生成元组集的传递闭包?

发布时间:2020-12-16 19:19:33 所属栏目:安全 来源:网络整理
导读:生成一组元组的传递闭包的最佳方法是什么? 例: 输入集((1,2),(2,3),(3,4),(5,0)) 输出设置((1,(1,0)) 解决方法 //one transitive stepdef addTransitive[A,B](s: Set[(A,B)]) = { s ++ (for ((x1,y1) - s; (x2,y2) - s if y1 == x2) yield (x1,y2))}//repe
生成一组元组的传递闭包的最佳方法是什么?

例:

>输入集((1,2),(2,3),(3,4),(5,0))
>输出设置((1,(1,0))

解决方法

//one transitive step
def addTransitive[A,B](s: Set[(A,B)]) = {
  s ++ (for ((x1,y1) <- s; (x2,y2) <- s if y1 == x2) yield (x1,y2))
}

//repeat until we don't get a bigger set
def transitiveClosure[A,B](s:Set[(A,B)]):Set[(A,B)] = {
  val t = addTransitive(s)
  if (t.size == s.size) s else transitiveClosure(t)
}

println(transitiveClosure(Set((1,4))))

这不是一个非常有效的实现,但它很简单.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读