sql - 识别连接节点堆中的图——这怎么称呼?

标签 sql algorithm graph

我有一个包含三列 X、Y、Z 的 SQL 表。我需要将它分组,这样所有具有相同 X 或 Y 或 Z 值的记录都分配到同一组。我需要确保具有相同值 X 或 Y 或 Z 的记录绝不会拆分到多个组中。

如果您将记录视为节点,将 X、Y、Z 的值视为边,则此问题与查找所有图形相同,其中每个图形中的节点将通过 X、Y 或 Z 直接或间接连接-边,但每个图将没有与其他图共有的边(否则它将是同一图的一部分)。

几年前我知道这叫什么,甚至还记得算法,但现在我忘记了。请告诉我如何调用此问题,以便我可以通过 Google 寻求解决方案。如果您现在有一个好的算法——请指点我一下。如果你有一个 SQL 实现——我会嫁给你:)

例子:

    X                   Y               Z            BUCKET
---------     ----------------      ---------      -----------
   1                   34              56              1
   54                  43              45              2
   1                   12              22              1
   2                   34              11              1

最后一行在桶 1 中,因为 Y=34 的值与第一行相同,在桶 1 中。

最佳答案

它看起来不像一个图表,更像是一个 simplicial complex . 但是如果我们把这个复杂的东西当作它的骨架图(数字被当作顶点,表格中的一行意味着所有这三个顶点都由一条边连接),那么我们可以使用任何算法来找到 connected components。这张图。我不确定在 SQL 中是否有可行的方法来执行此操作,也许使用 graph database 会更谨慎不知何故。

但是,对于这个特定问题,可能有一些我没有寻找的通过 SQL 获得的简单解决方案。

关于sql - 识别连接节点堆中的图——这怎么称呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688281/

相关文章:

MySQL select语句没有使用索引

docker - Gremlin:服务器上未配置别名 [g] 的遍历源 [g]

python - Networkx 程序化网络图可视化

sql - Join 是否比两个查询快

c# - 如何在 EF Core 中的Where子句中使用日期?

C++ 将大数与运算符重载相加

algorithm - Manacher 的算法真的是线性的吗?

c++ - 复合辛普森规则无限输出

algorithm - 图的邻接表表示

sql - 编译错误 “Method of Data Member Not Found”-DoCmd.Query表单 Access SQL