• <i id='xOacE'><tr id='xOacE'><dt id='xOacE'><q id='xOacE'><span id='xOacE'><b id='xOacE'><form id='xOacE'><ins id='xOacE'></ins><ul id='xOacE'></ul><sub id='xOacE'></sub></form><legend id='xOacE'></legend><bdo id='xOacE'><pre id='xOacE'><center id='xOacE'></center></pre></bdo></b><th id='xOacE'></th></span></q></dt></tr></i><div id='xOacE'><tfoot id='xOacE'></tfoot><dl id='xOacE'><fieldset id='xOacE'></fieldset></dl></div>
    • <bdo id='xOacE'></bdo><ul id='xOacE'></ul>

    <legend id='xOacE'><style id='xOacE'><dir id='xOacE'><q id='xOacE'></q></dir></style></legend>

    <small id='xOacE'></small><noframes id='xOacE'>

      <tfoot id='xOacE'></tfoot>

        如何合并具有交集的集合(连通分量算法)?

        How to merge sets which have intersections (connected components algorithm)?(如何合并具有交集的集合(连通分量算法)?)

              <legend id='s15KN'><style id='s15KN'><dir id='s15KN'><q id='s15KN'></q></dir></style></legend>
              <tfoot id='s15KN'></tfoot>
              • <bdo id='s15KN'></bdo><ul id='s15KN'></ul>
              • <small id='s15KN'></small><noframes id='s15KN'>

                  <tbody id='s15KN'></tbody>
                <i id='s15KN'><tr id='s15KN'><dt id='s15KN'><q id='s15KN'><span id='s15KN'><b id='s15KN'><form id='s15KN'><ins id='s15KN'></ins><ul id='s15KN'></ul><sub id='s15KN'></sub></form><legend id='s15KN'></legend><bdo id='s15KN'><pre id='s15KN'><center id='s15KN'></center></pre></bdo></b><th id='s15KN'></th></span></q></dt></tr></i><div id='s15KN'><tfoot id='s15KN'></tfoot><dl id='s15KN'><fieldset id='s15KN'></fieldset></dl></div>
                  本文介绍了如何合并具有交集的集合(连通分量算法)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  是否有任何有效的方法来合并具有交集的集合.例如:

                  Is there any effective way to merge sets which have intersections. For example:

                  l = [{1, 3}, {2, 3}, {4, 5}, {6, 5}, {7, 5}, {8, 9}]
                  

                  预期结果是:

                  r = [{1, 2, 3}, {4, 5, 6, 7}, {8, 9}]
                  

                  应该合并所有有交集(公共组件)的集合.例如:

                  All sets which have intersection (common components) should be merged. For example:

                  {1, 3} & {2, 3}
                  # {3}
                  

                  所以这两个集合应该合并:

                  So these two sets should be merged:

                  {1, 3} | {2, 3}
                  # {1, 2, 3}
                  

                  很遗憾,我没有任何可行的解决方案.

                  Unfortunately I don't have any working solution.

                  更新:结果中集合的顺序并不重要.

                  UPDATE: The order of sets in the result is not important.

                  推荐答案

                  实现 连接组件算法 是将集合列表转换为一组可散列的冻结集,以便在您遍历它并找到与当前集合相交的冻结集时,您可以轻松地将其从池中移除:

                  An efficient way to implement the connected components algorithm as mentioned by @mkrieger1 in the comments is to convert the list of sets to a set of hashable frozensets so that as you iterate through it and find a frozenset that intersects with the current one you can easily remove it from the pool:

                  pool = set(map(frozenset, l))
                  groups = []
                  while pool:
                      groups.append(set(pool.pop()))
                      while True:
                          for candidate in pool:
                              if groups[-1] & candidate:
                                  groups[-1] |= candidate
                                  pool.remove(candidate)
                                  break
                          else:
                              break
                  

                  给定 l = [{1, 3}, {2, 3}, {4, 5}, {6, 5}, {7, 5}, {8, 9}], groups 会变成:

                  [{1, 2, 3}, {4, 5, 6, 7}, {8, 9}]
                  

                  并且给定 l = [{1, 2}, {3, 4}, {2, 3}]groups 将变为:

                  And given l = [{1, 2}, {3, 4}, {2, 3}], groups will become:

                  [{1, 2, 3, 4}]
                  

                  并且给定 l = [{1}, {2}, {1, 2}]groups 将变为:

                  And given l = [{1}, {2}, {1, 2}], groups will become:

                  [{1, 2}]
                  

                  这篇关于如何合并具有交集的集合(连通分量算法)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Pythonic and efficient way of finding adjacent cells in grid(在网格中查找相邻单元格的 Pythonic 和有效方法)
                  map a hexagonal grid in matplotlib(在 matplotlib 中映射六边形网格)
                  Execute arbitrary python code remotely - can it be done?(远程执行任意 python 代码 - 可以吗?)
                  Python - Plotting colored grid based on values(Python - 根据值绘制彩色网格)
                  Is there a GUI design app for the Tkinter / grid geometry?(是否有 Tkinter/网格几何图形的 GUI 设计应用程序?)
                  tkinter Canvas Scrollbar with Grid?(带有网格的 tkinter 画布滚动条?)

                    • <small id='1ssMY'></small><noframes id='1ssMY'>

                      <tfoot id='1ssMY'></tfoot>
                          <tbody id='1ssMY'></tbody>
                          <bdo id='1ssMY'></bdo><ul id='1ssMY'></ul>
                          <legend id='1ssMY'><style id='1ssMY'><dir id='1ssMY'><q id='1ssMY'></q></dir></style></legend>
                        • <i id='1ssMY'><tr id='1ssMY'><dt id='1ssMY'><q id='1ssMY'><span id='1ssMY'><b id='1ssMY'><form id='1ssMY'><ins id='1ssMY'></ins><ul id='1ssMY'></ul><sub id='1ssMY'></sub></form><legend id='1ssMY'></legend><bdo id='1ssMY'><pre id='1ssMY'><center id='1ssMY'></center></pre></bdo></b><th id='1ssMY'></th></span></q></dt></tr></i><div id='1ssMY'><tfoot id='1ssMY'></tfoot><dl id='1ssMY'><fieldset id='1ssMY'></fieldset></dl></div>