当前位置: 首页 > 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引用的定…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...