论文阅读:Efficient Core Maintenance in Large Bipartite Graphs | SIGMOD 2024
还记得我们昨天讨论的《Querying Historical Cohesive Subgraphs over Temporal Bipartite Graphs》这篇论文吗?
https://blog.csdn.net/m0_62361730/article/details/141003301
这篇(还没看的快去看)
这篇论文主要研究如何在时间双向图上查询历史凝聚子图,而《Efficient Core Maintenance in Large Bipartite Graphs》则比较关注动态双向图中的双核维护(维护(𝛼, 𝛽)-核是为了在插入、删除时可以快速找到关键子结构)。两者的主要区别在于前者处理的是时间维度上的子图查询,而后者则是对动态更新的高效维护。然而,两者在处理动态数据方面有相似之处,均需要考虑图的频繁更新对算法效率的影响。
论文简介
《Efficient Core Maintenance in Large Bipartite Graphs》由Wensheng Luo、Qiaoyuan Yang、Yixiang Fang和Xu Zhou撰写。这篇论文主要探讨了如何在大型双向图中高效地维护(𝛼, 𝛽)-核 (bi-core)。(𝛼, 𝛽)-核作为双向图中的一种重要的凝聚子图模型,已在许多实际应用中得到了广泛应用,如产品推荐、欺诈者检测和社区搜索。然而,由于双向图通常是动态的,其顶点和边经常被插入和删除,从头计算(𝛼, 𝛽)-核的成本非常高。为了缓解这个问题,论文提出了一些高效的(𝛼, 𝛽)-核维护算法,通过引入双核数(bi-core numbers)的新概念,有效地减少计算冗余。
甚麽是(𝛼, 𝛽)-核?
(𝛼, 𝛽)-核是图中用于识别重要子结构的一种概念,特别适用于异质信息网络(Heterogeneous Information Networks,HINs)或双向图(Bipartite Graphs)。它是对经典的k-core概念的扩展,旨在捕捉图中的稠密子图或核心部分。
定义
在(𝛼, 𝛽)-核中,α和β分别是图中两种类型节点的度数阈值。具体来说,对于一个双向图G = (U, V, E),其中U和V是两类节点集,E是连接U和V的边集,(𝛼, 𝛽)-核定义如下:
- 一个子图H = (U’, V’, E’)是图G的(𝛼, 𝛽)-核,当且仅当:
- 对于每个节点u ∈ U’,其在子图H中的度数(即连接到V’中的节点数)至少为α。
- 对于每个节点v ∈ V’,其在子图H中的度数(即连接到U’中的节点数)至少为β。
直观理解
(𝛼, 𝛽)-核确保了在子图中,类型U的每个节点至少有α个邻居,且类型V的每个节点至少有β个邻居。这种结构在分析图的密集区域或核心部分时非常有用,因为它过滤掉了那些连接较少、可能不太重要的节点,突出了稠密的子结构。
例子
假设有一个双向图表示学术网络,其中U是作者集合,V是论文集合,边表示作者和论文之间的写作关系。如果我们定义一个(𝛼, 𝛽)-核,比如(3, 2)-核:
- 这意味着在这个子图中,每个作者至少写了3篇论文(α = 3)。
- 每篇论文至少由2个作者共同撰写(β = 2)。
通过这种方式,我们可以识别出那些活跃的作者群体和他们共同撰写的论文,从而揭示学术网络中的关键合作关系。
为甚麽需要维护(𝛼, 𝛽)-核?
在动态图中,因为图的结构经常发生变化,所以维护(𝛼, 𝛽)-核非常重要,不然就得花很多时间重新计算。维护(𝛼, 𝛽)-核可以确保在节点或边插入、删除时,快速调整和更新图中的关键子结构,从而保持分析结果的实时性和准确性。
总结来说,(𝛼, 𝛽)-核是图中重要的稠密子结构识别方法,适用于多种应用场景,通过维护这种核心结构,可以在动态变化的图数据中高效、准确地进行分析和挖掘。
研究背景与动机
双向图广泛用于描述不同类型实体之间的关系,例如电子商务中的用户和商品、金融网络中的欺诈者和账户、合作网络中的作者和论文、生物网络中的基因和蛋白质、社交网络中的用户和页面等。由于双向图在这些领域的广泛应用,挖掘关键子图结构以分析双向图已吸引了大量关注。其中,(𝛼, 𝛽)-核作为双向图上的一种广义的k核模型,已在多种应用中得到了广泛应用。然而,实际应用中的双向图通常是高度动态的,频繁的更新会导致(𝛼, 𝛽)-核的变化,从而影响依赖于(𝛼, 𝛽)-核的下游应用。因此,研究如何高效地维护动态双向图中的(𝛼, 𝛽)-核至关重要。
技术贡献
为了应对上述挑战,论文做出了以下主要贡献:
- 提出了一种新的双核数(bi-core numbers)概念,用于支持双核的维护。
- 基于双核数,提出了处理边插入和边删除的高效双核维护算法,有效减少了计算冗余。
- 在真实和合成数据集上的广泛实验评估表明,所提出的维护算法比最先进的方法快了两个数量级。
-
边插入算法
-
通过引入双核数的概念,分析顶点双核数的变化范围,提出高效的双核维护算法。实验结果表明,该算法在处理边插入时效率极高。
算法步骤
- 输入:双向图G = (U, V, E),待插入的边(e = (u, v))
- 初始化:标记受影响的节点集A,初始化为空集。
- 双核数更新:
- 若u和v均未达到新的双核数要求,将其加入受影响的节点集A。
- 对于A中的每个节点,递归更新其邻居节点的双核数,直到所有节点均满足新的双核数要求。
def insert_edge(G, u, v):# 插入边 (u, v)G.add_edge(u, v)affected_nodes = set()# 更新双核数if G.degree[u] < alpha or G.degree[v] < beta:affected_nodes.add(u)affected_nodes.add(v)# 递归更新受影响的节点while affected_nodes:node = affected_nodes.pop()for neighbor in G.neighbors(node):if G.degree[neighbor] < alpha or G.degree[neighbor] < beta:affected_nodes.add(neighbor)# 更新邻居节点的双核数G.update_degree(neighbor)return G
-
-
边删除算法
类似于边插入算法,论文也提出了高效的边删除算法,并通过理论分析证明了算法的有效性。
算法步骤
- 输入:双向图G = (U, V, E),待删除的边(e = (u, v))
- 初始化:标记受影响的节点集A,初始化为空集。
- 双核数更新:
- 若u和v在删除边后不再满足当前双核数要求,将其加入受影响的节点集A。
- 对于A中的每个节点,递归更新其邻居节点的双核数,直到所有节点均满足新的双核数要求。
def delete_edge(G, u, v):# 删除边 (u, v)G.remove_edge(u, v)affected_nodes = set()# 更新双核数if G.degree[u] < alpha or G.degree[v] < beta:affected_nodes.add(u)affected_nodes.add(v)# 递归更新受影响的节点while affected_nodes:node = affected_nodes.pop()for neighbor in G.neighbors(node):if G.degree[neighbor] < alpha or G.degree[neighbor] < beta:affected_nodes.add(neighbor)# 更新邻居节点的双核数G.update_degree(neighbor)return G
实验评估
实验部分,论文对所提出的算法在真实和合成数据集上进行了广泛的评估。结果显示,论文所提出的算法在处理动态双向图时,比现有最先进的方法快了两个数量级。此外,实验还验证了算法在不同参数设置下的鲁棒性和有效性。
以下是上面几张图的说明:
图 5:在所有资料集上边插入的效率:
- 这张图比较了在不同资料集(如IMDB、WC、AR等)上使用不同方法(如Re-compute、BUI、TDI、BIT* 和 Edge-Insert)进行边插入时的运行时间。
- 结果显示,Edge-Insert 方法在所有资料集上均具有较高的效率,运行时间显着低于其他方法。
图 6:插入5000条边后受影响的顶点、c-pairs和双核数的数量:
- 这张图展示了在插入5000条边后,各资料集中受影响的顶点数量、c-pairs数量和双核数的更新数量。
- 结果显示,Edge-Insert 方法能有效控制受影响的范围,更新的双核数和受影响的顶点数量相对较少。
图 7:插入边数量的影响(每条边的平均时间):
- 这张图展示了在不同资料集上,随着插入边数量的增加,每条边的平均运行时间。
- 结果显示,Edge-Insert 方法随着边数量的增加,运行时间增长相对平缓,显示出良好的可扩展性。
图 8:处理边插入的可扩展性测试:
- 这张图展示了在DTI和WT资料集上,Edge-Insert 方法和BIT* 方法在处理不同比例的边插入时的运行时间。
- 结果显示,Edge-Insert 方法在处理大量边插入时,运行时间增长趋势明显低于BIT* 方法。
图 9:在所有资料集上边删除的效率:
- 这张图比较了在不同资料集上使用不同方法(如Re-compute、BUI、TDR、BIT* 和 Edge-Delete)进行边删除时的运行时间。
- 结果显示,Edge-Delete 方法在所有资料集上均具有较高的效率,运行时间显着低于其他方法。
后续研究方向与应用前景
在《Efficient Core Maintenance in Large Bipartite Graphs》论文的基础上,未来的研究可以进一步拓展到更多复杂的动态环境中,例如考虑更多种类的图更新操作(如顶点插入和删除)以及更复杂的双向图结构。此外,探索如何同时维护多个不同参数的双核也是一个重要方向,这在需要同时关注多个社区或子图时尤为重要。随着图数据规模的不断扩大,研究如何在分布式和并行计算环境中高效地维护双核将显得尤为关键。另一个值得探索的领域是将双核维护算法扩展到时序双向图中,以支持时间动态下的双核维护和分析。在实际应用方面,该研究的成果在多个领域具有广泛的应用前景,例如在电子商务推荐系统中,通过维护用户和商品之间的(𝛼, 𝛽)-核,可以高效地识别用户群体和热门商品,从而提高推荐系统的准确性和效率;在社交网络中,维护用户和页面之间的双核,有助于发现兴趣群体和热点话题,推动社交网络的健康发展;在生物网络中,应用双核维护算法可以帮助研究人员更快地发现基因和蛋白质之间的关键关系,推动生物医学研究的进展;在金融网络中,维护账户和交易之间的双核,有助于实时检测和预防欺诈行为,保障金融系统的安全。总的来说,论文在双向图的动态维护方面提供了创新的解决方案,其研究成果对实际应用场景具有重要意义,并为未来的研究提供了丰富的方向和应用前景。
论文地址:https://dl.acm.org/doi/10.1145/3617329
相关文章:

论文阅读:Efficient Core Maintenance in Large Bipartite Graphs | SIGMOD 2024
还记得我们昨天讨论的《Querying Historical Cohesive Subgraphs over Temporal Bipartite Graphs》这篇论文吗? https://blog.csdn.net/m0_62361730/article/details/141003301 这篇(还没看的快去看) 这篇论文主要研究如何在时间双向图上查询历史凝聚子图,而《E…...

LLMOps — 使用 BentoML 为 Llama-3 模型提供服务
使用 BentoML 和 Runpod 快速设置 LLM API 经常看到数据科学家对 LLM 的开发感兴趣,包括模型架构、训练技术或数据收集。然而,我注意到,很多时候,除了理论方面,许多人在以用户实际使用的方式提供这些模型时遇到了问题…...

微软蓝屏事件揭秘:有问题的数据引发内存读取越界
讲动人的故事,写懂人的代码 CrowdStrike前一阵在官网上发布了上周爆发的全球企业微软蓝屏事件的官方初步复盘结果。其中谈到了这次事件的根本原因: 2024年7月19日,我们部署了两个额外的IPC模板实例。由于内容验证器中的一个bug,使…...

NASA:北极ARCTAS差分吸收激光雷达(DIAL)遥感数据
ARCTAS Differential Absorption Lidar (DIAL) Remotely Sensed Data ARCTAS差分吸收激光雷达(DIAL)遥感数据 简介 ARCTAS差分吸收激光雷达(DIAL)遥感数据是一种远程感测技术,用于测量大气中不同波长的激光辐射被大…...

Android 文件上传与下载
在实际开发涉及文件上传不会自己写上传代码,一般 会集成第三网络库来做图片上传,比如android-async-http,okhttp等,另外还有七牛也提供 了下载和上传的API。 1.项目用到的图片上传的关键方法: 这里用到一个第三方的库…...

Java语言的充电桩系统Charging station system
介绍 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码-共享充电桩-充电桩软件 软件介绍 小程序端:城市切换、附近电站、电桩详情页…...

RCE之无参数读取文件
什么是无参数? 顾名思义,就是只使用函数,且函数不能带有参数,这里有种种限制:比如我们选择的函数必须能接受其括号内函数的返回值;使用的函数规定必须参数为空或者为一个参数等 例题: <?…...

Python GUI开发必看:Tkinter Button控件使用详解
Button(按钮)组件用于实现各种各样的按钮。 Button组件可以包含文本或图像,你可以将一个Python的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。 Button组件仅能显示单一字体的文本,…...

上海市计算机学会竞赛平台2024年7月月赛丙组得分排名
题目描述 给定 nn 名学生的考试得分,这些学生的学号为 11 到 nn,其第 ii 号学生的得分为 aiai,请将这些学生按照分数从大到小的顺序排列并输出学号序列。 若两个学生得分相同,则先输出较小的学号。 输入格式 第一行…...

Can GPT-3 Perform Statutory Reasoning?
文章目录 题目摘要相关工作SARAGPT-3 对美国法典的了解GPT-3 在对合成法规进行简单推理时遇到困难结论 题目 GPT-3 可以进行法定推理吗? 论文地址:https://arxiv.org/abs/2302.06100 摘要 法定推理是用事实和法规进行推理的任务,法规是立法机…...

redis面试(十一)锁超时
boolean res lock.tryLock(100, 10, TimeUnit.SECONDS); RedissonLock里面有这样一个方法tryLock(),意思是尝试获取锁的结果。 最大等待时间100s,并且获取到锁之后,10s之内没有释放的话,锁会自动失效。 尝试获取锁超时 time …...

C代码做底层及Matlab_SimuLink做应用层设计单片机程序
前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…...

Cloud Kernel SIG 月度动态:ANCK OOT 驱动基线更新,发布 2 个 ANCK 版本
Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 1. 发布 ANCK 5.10-016.4 小版本。 2. 发布 ANCK 5.10-017.1 小版本。 3. ANCK 新增海光平…...

vue3仿飞书头像,根据不同名称生成不同的头像背景色
效果展示: 传递三个参数: name:要显示的名称;size:头像的大小;cutNum:分割当前名称的最后几位数; 代码如下: <template><div:style"{color: #fff,borde…...

SpringBoot整合三方
SpringBoot整合redis 引入redis依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId&g…...

React之组件的使用
Vue、React和Angular是三个流行的前端框架,采用组件化的开发方式。支持虚拟DOM(Virtual DOM)技术,有丰富的生态系统、大量的插件和工具可以使用。Vue的语法是传统的HTML和JavaScript,React使用JSX语法,Angu…...

深度学习--长短期记忆网络
1.引入 RNN 可以将以前的信息与当前的信息进行连接。例如,在视频中,可以用前面的帧来 帮助理解当前帧的内容;在文本中,可以用前面半句话的内容来预测后面的内容。但是, RNN 存在一个记忆消失的问题。例如,…...

研0 冲刺算法竞赛 day29 P2249 【深基13.例1】查找
P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路: ①二分查找 ②stl函数:lower_bound(a.begin(),a.end(),x) 返回第一个大于等于 x的数的地址 代码: #include<iostream> #include<algorithm> …...

基于vue框架的CKD电子病历系统nfa2e(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:患者,医生,药品信息,电子病历,临时医嘱,长期医嘱,健康科普 开题报告内容 基于Vue框架的CKD电子病历系统 开题报告 一、选题背景 随着信息技术的飞速发展和医疗信息化的深入推进,电子病历系统(Electronic Medic…...

笔记:python 安装tar包报错
报错信息 ERROR: Could not find a version that satisfies the requirement setuptools>40.8.0 (from versions: none)ERROR: No matching distribution found for setuptools>40.8.0分析 1,当前已安装 setuptools 并且版本超过40.8.0 解决方案 缺包了&am…...

575. 分糖果
哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 一、题目二、答案三、总结 一、题目 …...

手机电量消耗分析工具 Battery Historian 指南
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中 电量 的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、安装Battery Historian二、收集Batterystats 数据三、使用B…...

笔试练习day4
目录 WY22 Fibonacci数列题目解析解法暴力解法贪心代码 NC242 单词搜索题目解析例子1解析例子2解析例子3解析解法深度优先遍历dfs实现最终代码 BC140 杨辉三角解法线性dp问题代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒&am…...

公主少爷都爱看的haproxy七层代理详细介绍及常见实验详解
目录 一、负载均衡 1.1什么是负载均衡 1.2为什么要实验负载均衡 1.3四层负载均衡 1.4七层负载均衡 1.5四层负载均衡和七层负载均衡的对比 二、什么是haproxy 2.1定义 2. 2功能和特点 2.3应用场景 2.4haproxy的分类 三、安装及基本配置的信息 3.1软件的安装 3.2ha…...

Android笔试面试题AI答之Kotlin(6)
文章目录 24. 以下代码执行的结果是什么?25. 解释一下下述Kotlin 代码有什么问题?26. 如何在 Kotlin 中创建常量?示例注意事项总结 27. Koltin 可以互换使用 IntArray 和 Kotlin 中的 Array 吗?IntArrayArray<Int>互换使用从…...

“tcp控制协议”的理解
情景解释: 1.过程: 在用户进行网络间通信时,不管是客户端还是服务端,都会有两个缓冲区——发送缓冲区和接受缓冲区。 通过4个缓冲区进行数据交流。 用户通过write()将数据发送到他的发送缓冲区中,再传输到服务端的…...

考试成绩查询系统,发成绩不再愁
在考试季落幕后,家长们总是怀着紧张的心情,期待着孩子们的成绩单。传统上,老师们需要手动发送成绩单给每位家长,这个过程不仅耗时耗力,而且容易出错,给老师们带来了不小的压力。 随着科技的进步,…...

【扒代码】图像数据 Transformer
def forward(self, x, bboxes):# 确定对象的数量,如果不是零样本学习场景,则根据bboxes的数量确定num_objects bboxes.size(1) if not self.zero_shot else self.num_objects# backbone# 通过主干网络提取特征backbone_features self.backbone(x)# pre…...

光伏仿真系统的使用流程
为了更有效地规划设计并评估光伏电站的性能与经济性,光伏仿真系统应运而生。该系统通过模拟实际运行场景,为项目开发者提供全面的数据支持和决策依据。 1、气象数据分析 气象数据是光伏系统性能评估的基础。此阶段,仿真系统需收集并处理项目…...

【Dash】使用 dash_mantine_components 创建图表
一、Styling Your App The examples in the previous section used Dash HTML Components to build a simple app layout, but you can style your app to look more professional. This section will give a brief overview of the multiple tools that you can use to enhan…...