php-图形中的3-clique计数

我正在(大约)大型图形(具有约380K边)上进行操作.我编写了一个程序来计算图中的3个小数.一个简单的例子:

List of edges:
A - B
B - C
C - A
C - D

List of cliques:
A - B - C

MySQL表结构:

+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| v1    | bigint(20) | YES  | MUL | NULL    |       | 
| v2    | bigint(20) | YES  | MUL | NULL    |       | 
+-------+------------+------+-----+---------+-------+

3-clique只是图中的三角形.目前,我正在使用PHP MySQL执行此操作.不出所料,它不够快.有没有办法在纯MySQL中做到这一点? (也许是一种将所有3-clique插入到表中的方法?)

最佳答案
SELECT T1.v1,T2.v1,T3.v1 FROM TableName T1,TableName T2,TableName T3
WHERE T1.v1 < T1.v2 AND T2.v1 < T2.v2 AND T3.v1 < T3.v2
AND T1.v1 = T3.v1 AND T1.v2 = T2.v1 AND T2.v2 = T3.v2

应该做到的.我在这里所做的工作是确保所有考虑的边缘的v1都小于v2,只是为了删除重复项.然后,通过边缘的起点/终点将边缘连接起来很简单.返回每个对中的第一个点.

如果边缘从一个节点回到同一节点,则可能需要适当添加其他检查.

编辑:感谢Legend.进行了更改.提醒我,我们需要确保T3中找到的边缘与T1中的边缘匹配,因此我们必须将每个中的第一个链接在一起!最初我有T3.v1> T3.v2在where子句的第一行中,但是为了减少混乱而对其进行了更改,但是却忘记了更改第二部分!

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
&gt; [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...