加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

php-图形中的3-clique计数

发布时间:2021-02-05 22:14:13 所属栏目:MySql教程 来源:网络整理
导读:我正在(大约)大型图形(具有约380K边)上进行操作.我编写了一个程序来计算图中的3个小数.一个简单的例子: List of edges:A - BB - CC - AC - DList of cliques:A - B - C MySQL表结构: +-------+------------+------+-----+---------+-------+| Field | Type

我正在(大约)大型图形(具有约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子句的第一行中,但是为了减少混乱而对其进行了更改,但是却忘记了更改第二部分!

(编辑:鹰潭站长网)

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

    热点阅读