Php 图中的3-团计数

Php 图中的3-团计数,php,algorithm,mysql,Php,Algorithm,Mysql,我在一个(不太)大的图上操作,它有大约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 | +-------

我在一个(不太)大的图上操作,它有大约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-团只是图形中的三角形。目前,我正在使用PHP+MySQL进行此操作。正如预期的那样,它还不够快。在纯MySQL中有没有办法做到这一点?(可能是将所有3个派系插入表格的一种方法?

从TableName T1、TableName T2、TableName T3中选择T1.v1、T2.v1、T3.v1
其中T1.v1T1.v1=T3.v1和T1.v2=T2.v1和T2.v2=T3.v2
我们应该做到这一点。我所做的是确保所有考虑的边的v1小于v2,只是为了删除重复项。然后,通过起点/终点将边连接起来是一个简单的问题。返回每对中的第一个点

如果有从节点返回到同一节点的边,则可能需要添加额外的检查(视情况而定)


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

@Farthinworth:谢谢你的时间。由于某种原因,它给了我一个空集。我想我没有你最后描述的情况。你介意再解释一下吗?编辑:我只是在一张小一点的桌子上试了一下。如果我遗漏了什么,我将调查该语句。添加新注释,因为这在测试表上起作用:从cycletest1 T1、cycletest1 T2、cycletest1 T3中选择T1.v1、T2.v1、T3.v2,其中T1.v1SELECT 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