当前位置: 首页 > news >正文

论文阅读 - Scaling Up k-Clique Densest Subgraph Detection | SIGMOD 2023

1. 论文背景

密集子图发现(Densest Subgraph Discovery)是图挖掘领域的一个基础研究方向,并且近年来在多个应用领域得到了广泛研究。特别是在生物学、金融学和社交网络分析等领域,密集子图的发现对理解复杂网络结构和行为具有重要意义。在这些应用中,找到“近似团”(near-clique)尤为关键,因为“近似团”往往反映了正在形成的团结构,或者由于数据噪声或缺失而导致的未完全连接的团。例如,在蛋白质-蛋白质相互作用网络中,发现近似团有助于预测新的蛋白质相互作用,而在社交网络中,这些结构则可能揭示潜在的社交群体或社区。

在这里插入图片描述

2. 论文动机

传统的密集子图发现方法,如基于二分搜索的算法和基于凸规划的方法,在处理大规模图或较大 k 值时,通常表现出效率低下的问题。二分搜索方法需要大量的最大流计算,而凸规划方法则需重复计算所有 k-Clique,这在大规模图数据集上会消耗大量的计算资源和时间。因此,迫切需要开发一种新型的、高效且可扩展的算法,能够在处理大规模图数据时,提供更优的性能并保持合理的时间复杂度。

3. 研究问题

本论文的研究重点在于如何在大规模图中高效地检测和提取 k-Clique 最密集子图。目标是设计一种算法,能够降低计算资源的消耗,同时在合理的时间内提供接近最优的解。

4. 方法和技术

这篇论文提出了以下主要贡献:

4.1 SCT*-Index

SCT*-Index 是基于简洁 Clique 树(Succinct Clique Tree)的改进结构,用于有效地组织和索引 k-Clique。传统的简洁 Clique 树结构虽然可以紧凑地表示 k-Clique,但在处理大规模图时可能会导致冗余遍历。为了解决这一问题,SCT*-Index 引入了以下优化:

  • 存储子树的最大深度:SCT*-Index 中的每个节点不仅存储 k-Clique 的信息,还记录了子树的最大深度。这一改进使得算法在搜索 k-Clique 时,可以跳过不包含 k-Clique 的分支,大大提高了搜索效率。

  • 退化性和出度修剪:通过采用基于退化性和出度的修剪策略,SCT*-Index 可以避免构建那些不可能包含 k-Clique 的子树,从而减少存储空间并提高查询速度。

    在这里插入图片描述

4.2 SCTL 算法

基于 SCT*-Index,这篇论文提出了 SCTL 算法。SCTL 算法的核心思想是通过索引直接读取 k-Clique,并逐步优化顶点权重,逼近最优解。具体步骤包括:

  • 路径遍历:SCTL 采用深度优先的方式,从 SCT*-Index 的根节点遍历到叶节点,每条路径都代表一个 k-Clique。通过遍历这些路径,SCTL 能够高效地获取所有 k-Clique。

  • 权重更新:算法通过逐步调整顶点的权重来优化子图密度,确保算法收敛到最优解。相比传统方法,SCTL 不需要重新计算 k-Clique,而是直接从索引中读取,提高了运行效率。

    在这里插入图片描述

    上图显示了在 SCTL 算法中的权重更新过程。在第一次迭代后,每个顶点的初始权重如上表所示。接下来,算法处理两个团(Clique),分别是 {v6,v5,v3}{v_6, v_5, v_3}{v6,v5,v3} 和 {v6,v5,v2}{v_6, v_5, v_2}{v6,v5,v2}。

    • 当处理 {v6,v5,v3}{v_6, v_5, v_3}{v6,v5,v3} 时,更新了顶点 v3v_3v3 的权重,导致其权重增加了 1。
    • 随后处理 {v6,v5,v2}{v_6, v_5, v_2}{v6,v5,v2},其中顶点 v2v_2v2 的权重也增加了 1。

    通过这个过程,上图展示了在 SCTL 算法中的权重更新机制,该机制在每次迭代中选择权重最小的顶点进行增加,从而逐步逼近最优解。

4.3 SCTL* 算法

为了进一步提升 SCTL 的性能,这篇论文引入了 SCTL* 算法。SCTL* 通过图减少和批处理优化技术,进一步提高了算法的效率:

  • 图减少技术:SCTL* 使用 k-Clique 隔离分区技术,将原图划分为多个独立的子图,并在这些子图上并行运行 SCTL 算法。这种划分策略减少了每次计算的图的规模,从而提升了算法的总体性能。
  • 批处理优化:SCTL* 通过批处理优化技术,能够在一次操作中处理多个 k-Clique,大大减少了算法的总运行时间。该优化利用了索引结构的特点,使算法在处理大规模数据集时更加高效。

4.4 基于采样的算法

为了处理超大规模网络,这篇论文提出了一种基于采样的算法 SCTL*-Sample。该算法通过抽样技术,仅对部分 k-Clique 进行计算,提供了一个近似的最密集子图解。其主要特点包括:

  • k-Clique 抽样:SCTL*-Sample 从 SCT*-Index 中抽取一定比例的 k-Clique,以减少计算量。相比于完全枚举所有的 k-Clique,这种方法显著降低了时间复杂度。
  • 近似解计算:基于采样的 k-Clique,算法迭代优化顶点权重,最终生成一个近似的最密集子图。该方法在处理超大规模图时表现出良好的扩展性,并能够在短时间内提供合理的近似解。

5. 实验验证

这篇论文在 12 个实际数据集上对提出的算法进行了广泛的实验验证,实验结果表明,SCTL* 在处理大规模图时,比现有最优方法快了两个数量级。此外,SCTL*-Sample 在处理具有数十亿条边的超大规模图数据时,能够提供具有良好准确性的近似解,并显著减少计算时间。

在这里插入图片描述

图 5 和图 6 展示了不同数据集上 k 值对 KCL、SCTL 和 SCTL* 三种算法运行时间的影响,以及 SCT*-k’-Index 构建对 SCTL 和 SCTL* 运行时间的影响。

  • 图 5:展示了在五个数据集(Email、YouTube、soc-Pokec、Gowalla 和 Wikital)上,不同的 k 值对 KCL、SCTL 和 SCTL* 算法运行时间的影响。可以看到,随着 k 值的变化,SCTL 和 SCTL* 的运行时间普遍低于 KCL,表明在较大 k 值时,SCTL 和 SCTL* 的效率更高。
  • 图 6:展示了 SCT*-k’-Index 的构建对 SCTL 和 SCTL* 算法运行时间的影响。通过构建 SCT*-k’-Index,SCTL* 的运行时间得到了显著优化,尤其在 k 值较大时,这一优化效果更为明显。这表明,SCT*-k’-Index 在减少计算复杂度和提升算法效率方面起到了重要作用。

这些实验结果表明,SCTL 和 SCTL* 在处理大规模数据集和较大 k 值时,能够显著减少运行时间,且 SCT*-k’-Index 构建的引入进一步提高了算法的效率。

在这里插入图片描述

图 7 展示了 KCL、SCTL、SCTL* 以及提出的优化技术(如 SCTL-Batch)在不同数据集上的有效性,包括密度比率(ratio to optimal density)和加速比率(speedup ratios)的比较。在 (a) 和 (b) 图中,展示了在 Email 和 YouTube 数据集上,随着 k 值的增加,KCL、SCTL 和 SCTL* 算法的密度比率基本接近最优解,表明这些算法在优化目标上都具有较高的准确性。而 © 到 (f) 图则展示了在 Email、YouTube、soc-Pokec 和 Gowalla 数据集上,SCTL* 与其优化版本(SCTL-Batch)在不同 k 值下的加速比率。结果表明,SCTL* 和 SCTL-Batch 在多数情况下都显著提升了运行速度,尤其是在 soc-Pokec 数据集上,SCTL* 的加速效果最为显著,表明这些优化技术在处理不同规模和复杂度的图数据时具有较好的通用性和效率。

6. 结论

这篇论文提出的 SCT*-Index 和 SCTL 算法为 k-Clique 最密集子图问题提供了高效且可扩展的解决方案,通过引入图减少和批处理优化等技术,显著提高了算法在处理大规模图数据时的性能。实验结果显示,SCTL* 相较于现有方法在处理大规模图数据时表现出了极大的效率优势,特别是在处理具有数十亿条边的超大规模网络时,其基于采样的算法 SCTL*-Sample 能够在较短时间内提供合理的近似解。在未来,这篇论文提出的算法和技术有望在多个领域得到广泛应用,如生物信息学中的蛋白质相互作用网络分析、社交网络中的社区检测、金融数据中的异常行为识别以及网络安全中的通信模式分析。此外,未来的研究可以进一步优化这些算法,使其能够应对更加复杂和动态的图结构,并探索其在分布式计算环境中的应用,以便更好地处理超大规模的分布式数据集。这些研究将为图挖掘领域的持续发展提供坚实的技术基础和应用前景。

论文地址:https://dl.acm.org/doi/10.1145/3588923

相关文章:

论文阅读 - Scaling Up k-Clique Densest Subgraph Detection | SIGMOD 2023

1. 论文背景 密集子图发现(Densest Subgraph Discovery)是图挖掘领域的一个基础研究方向,并且近年来在多个应用领域得到了广泛研究。特别是在生物学、金融学和社交网络分析等领域,密集子图的发现对理解复杂网络结构和行为具有重要…...

前端框架(三件套)

学习网站 HTML 系列教程&#xff08;有广告&#xff09; HTML&#xff08;超文本标记语言&#xff09; | MDN (mozilla.org)&#xff08;英文不太友好&#xff09; 1.HTML5 & CSS3 1.1HTML5表格 <!DOCTYPE html> <html lang"en"> <head>…...

MemoryCache 缓存 实用

MemoryCache 缓存 实用,相关逻辑代码里已详细注释&#xff0c; 在Java中创建一个单例模式&#xff08;Singleton Pattern&#xff09;的MyMemoryCache类&#xff0c;可以采用多种方法&#xff0c;其中最常见的是使用“饿汉式”和“懒汉式”&#xff08;线程安全和非线程安全&am…...

Java设计模式(命令模式)

定义 将一个请求封装为一个对象&#xff0c;从而让你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 角色 抽象命令类&#xff08;Command&#xff09;&#xff1a;声明用于执行请求的execute方法&#xff0c;通…...

什么是 CI/CD?

什么是 CI/CD&#xff1f; CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;是一种软件开发实践&#xff0c;旨在通过自动化的方式频繁地构建、测试和发布软件。CI/CD 可以显著提高软件交付的速度和质量&#xff0c;使团队能够更快地响应市场变化和…...

【免费】最新区块链钱包和私钥的助记词碰撞器,bybit使用python开发

使用要求 1、用的是google里面的扩展打包成crx文件&#xff0c;所以在使用之前你需要确保自己电脑上有google浏览器&#xff0c;而且google浏览器版本需要在124之上。&#xff08;要注意一下&#xff0c;就是电脑只能有一个Chrome浏览器&#xff09; 2、在win10上用vscode开发…...

【苍穹外卖JAVA项目】第2天:新增员工

在EmployeeMapper.java中插入数据&#xff1a;一、新增员工 1.产品原型 2.接口设计 由于需要提交员工信息&#xff0c;用post请求方式&#xff0c;可以携带json数据 3.设计数据库的employee表 4.设计DTO 数据传输对象&#xff08;DTO&#xff09;&#xff1a;封装前端提交过…...

队列的实现及循环队列

一、队列的概念及结构 队列只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列具有先进先出FIFO&#xff08;Fist In First Out&#xff09;。 入队列&#xff1a;进行插入操作的一端称为队尾。 出队列&#xff1a;进行删除操作的一端称为…...

docker部署zookeeper和kafka

docker部署zookeeper和kafka zookeeperkafkakafka-eagle zookeeper firewall-cmd --zonepublic --add-port2181/tcp --permanent firewall-cmd --reload docker pull zookeeper:3.4.14 docker run -d --name zk -p 2181:2181 zookeeper:3.4.14mkdir -p /root/zookeeper/data m…...

(13)zabbix的监控-1

前言&#xff1a;在上一次的基础上&#xff0c;完成实验。 1、添加一个空模板&#xff0c;方便 2、添加空模板到主机192.168.121.50 client-one里面模板是空的 4、在主机添加监控项和图形 5、自定义监控项&#xff0c;在客户端定义 [rootclient1 ~]# vim /etc/zabbix/zabbix_…...

Redis相关面试题(二)

一、Bit中不同命令使用的场景 二、什么是缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩&#xff1f; 缓存击穿&#xff1a;是指当某一个key的缓存过期时大并发量的请求同时访问key&#xff0c;瞬间击穿服务器直接访问到数据库&#xff0c;使得数据库处于负载情况 缓存穿透…...

Docker Compose与私有仓库

Docker Compose与私有仓库 docker-compose -v 查看版本信息 Docker Compose的应用 创建APACHE容器 vim docker-compose.yaml yaml文件缩进严格&#xff1b;冒号后有内容需要加空格&#xff0c;冒号后无内容一般不加空格 冒号后的内容中若包含路径‘/’或‘&#xff1a;’时…...

AI学习记录 - gpt如何进行token化,理论知识,以GPT2为举例

AI学习记录已经发了十几篇&#xff0c;大佬们可以看看&#xff0c;如果有帮助动动小手点赞 token入门版&#xff0c;有空会更新具体代码操作 GPT4当中&#xff0c;我们提问问题是按照token进行扣费的&#xff0c;那到底什么是token&#xff1f; 在不同的语言模型当中&#x…...

Java线程池和执行流程

在 Java 中&#xff0c;常见的四种线程池包括&#xff1a; 1. newFixedThreadPool&#xff08;固定大小线程池&#xff09; 应用场景&#xff1a;适用于需要限制线程数量&#xff0c;并且任务执行时间比较均匀的场景&#xff0c;例如服务器端的连接处理。优点&#xff1a;线程数…...

进程信号的产生与处理

目录 前言 一.信号的概念 二.信号的产生 1.键盘产生 2.系统调用 3.软件条件 4.异常 三.信号的保存 四.信号的处理 信号处理的方式 设定屏蔽信号 自定义处理信号 信号处理的时机 前言 进程信号&#xff08;Process Signals&#xff09;是操作系统与运行进程之间进行通…...

统一响应结果封装,Result类的实现【后端 06】

统一响应结果封装&#xff0c;Result类的实现 在开发Web应用或API接口时&#xff0c;如何优雅地处理并返回响应结果是每个开发者都需要考虑的问题。统一响应结果封装&#xff08;Unified Response Encapsulation&#xff09;作为一种广泛采用的实践&#xff0c;不仅提高了API的…...

明日周刊-第20期

本周异形新电影上映&#xff0c;开始期待起来了&#xff0c;毕竟这是一个经久不衰的ip。还有就是马上来临的黑神话悟空&#xff0c;属于我们自己的3A大作&#xff0c;接下去的每一天都是新的期待。 文章目录 科技短讯资源分享随便说说一点心情 科技短讯 科技创新与突破 人工智…...

深入剖析 Spring 常用注解:功能与差异的全景洞察

《深入剖析 Spring 常用注解&#xff1a;功能与差异的全景洞察》 在当今的 Java 开发领域&#xff0c;Spring 框架无疑是最广泛使用的框架之一。而在 Spring 中&#xff0c;注解的运用极大地简化了开发流程&#xff0c;提高了代码的可读性和可维护性。本文将深入探讨 Spring 中…...

【隐私计算篇】隐私计算使用不当也会泄露原始数据

1. 背景信息 有个有趣的问题&#xff0c;刚好最近有讨论到&#xff0c;在这里也抛一下&#xff0c;就是隐私计算中我们经常谈到主流的一些技术&#xff0c;比如联邦学习、多方安全计算、安全求交、匿踪查询、可信执行环境等&#xff0c;然后笼统地会称这些技术实现了对隐私…...

C++第一讲:开篇

C第一讲&#xff1a;开篇 1.C历史背景1.1C创世主--本贾尼1.2C版本更新1.3C的重要性1.4C书籍推荐 2.C的第一个程序3.命名空间3.1namespace是什么3.2namespace的使用3.3namespace使用注意事项3.4命名空间的使用 4.C输入和输出5.缺省参数6.函数重载7.引用7.1什么是引用7.2引用的定…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...