论文阅读报告: 在时间双向图上查询基于时间的的密集子图 | ICDE 2024

news2024/9/24 9:22:33

摘要

本文提出了一个新的模型(α, β, T)-core,用于在时间双向图上寻找凝聚子图。时间双向图中,不同实体之间的关系随着时间的推移而变化。为了提高查询效率,本文提出了顶点分区和时间分区的历史索引(VH-Index和TH-Index),并进一步提出了时间交集索引(TH*-Index)。实验结果表明,本文提出的模型和算法在多个真实数据集上表现出色。

什么是时间双向图

时间双向图(Temporal Bipartite Graph)是指在图中存在两类不同的顶点集合,并且这些顶点之间的关系(边)随着时间的推移而变化。每条边都有一个时间戳,表示该边在特定时间发生。时间双向图可以用于建模许多现实世界的应用场景,如用户-商品购买关系、作者-论文发表关系等。

时间双向图的构成

  1. 顶点集合
    • 上层顶点集(U):表示一种类型的实体。例如,在用户-商品购买网络中,上层顶点可以表示用户。
    • 下层顶点集(L):表示另一种类型的实体。例如,在用户-商品购买网络中,下层顶点可以表示商品。
  2. 边集合(E)
    • 边连接上层顶点和下层顶点,表示两种实体之间的关系。例如,用户购买商品。在时间双向图中,边带有时间戳,表示这种关系发生的时间。

举例说明

我们以一个简化的用户-商品购买网络为例,其中:

  • 顶点集U表示用户
  • 顶点集L表示商品
  • 边表示用户在某一时间购买某一商品
  • 每条边都有一个时间戳,表示购买时间

假设有以下用户和商品:

  • 用户U: {Alice, Bob, Carol}
  • 商品L: {Book, Pen, Notebook}

时间双向图的边集可以如下表示:

  • (Alice, Book, 2024-01-01): 表示Alice在2024年1月1日购买了Book

  • (Bob, Pen, 2024-01-03): 表示Bob在2024年1月3日购买了Pen

  • (Alice, Notebook, 2024-01-05): 表示Alice在2024年1月5日购买了Notebook

  • (Carol, Book, 2024-01-06): 表示Carol在2024年1月6日购买了Book

  • (Bob, Notebook, 2024-01-07): 表示Bob在2024年1月7日购买了Notebook

    在这里插入图片描述

研究背景

在许多现实世界的应用中,例如作者-论文网络、用户-物品网络等,不同实体之间的关系可以自然地表示为双向图。双向图由两类顶点和连接它们的边组成,这些边只在不同类别的顶点之间存在。在时间双向图中,边不仅连接不同类别的顶点,还带有时间戳,表示这种关系在某一特定时间发生或存在。随着时间的推移,这些关系会发生变化,形成时间双向图。传统的凝聚子图(密集子图)模型没有考虑时间维度,因此无法捕捉关系的动态变化。为了弥补这一不足,本文提出了时间双向图上的(α, β, T)-core模型。

研究问题

本文研究的问题是在时间双向图上找到满足给定度约束的最大子图。具体来说,给定时间窗口T=[ts, te],以及度约束α和β,目标是找到一个子图,使得在该时间窗口内,上层和下层顶点的度分别至少为α和β。

主要贡献

  1. 提出新的凝聚子图模型(α, β, T)-core:该模型结合了时间维度,能够捕捉关系的动态变化。
  2. 设计了高效的索引结构:包括顶点分区历史索引(VH-Index)、时间分区历史索引(TH-Index)和时间交集索引(TH*-Index),以提高查询效率。
  3. 开发了高效的构建和查询算法:提出了顺序和并行算法,用于高效构建时间交集索引。
  4. 实验验证:在10个真实数据集上进行了大量实验,验证了模型和算法的有效性和效率。

预备知识

本文使用了一些基本的数学符号和定义:

  • 时间双向图G(V, E):V表示顶点集,E表示带有时间戳的边集。
  • U(G)和L(G):分别表示上层和下层顶点集。
  • 快照G[ts, te]:表示在时间窗口[ts, te]内的子图。
  • 度和邻居:顶点u在图G中的度表示为deg(u, G),邻居集表示为N(u)。

索引的基本思想

  1. 顶点分区历史索引(VH-Index)

    • 基本思想:存储每个顶点在不同时间窗口内的状态,以便快速检索满足(α, β, T)-core条件的顶点。
    • 实现方式:对于每个顶点u,VH-Index存储所有可能的(α, β, T)-core组合的时间窗口。
  2. 时间分区历史索引(TH-Index)

    • 基本思想:通过按时间存储顶点,减少查询过程中需要访问的顶点数量。
    • 实现方式:TH-Index按时间分区存储顶点,将每个时间窗口内的(α, β, T)-core顶点集合存储在一起。
  3. 时间交集索引(TH-Index)*:

    • 基本思想:结合VH-Index和TH-Index的优点,既减少存储空间,又提高查询效率。
    • 实现方式:通过存储代表性的时间点,减少冗余信息的存储,并在查询时进行交集计算。

索引的构建

  1. 顶点分区历史索引(VH-Index)

    • 步骤:
      1. 对于每个顶点u和每个可能的α、β组合,计算u在不同时间窗口内的状态。
      2. 存储每个顶点在不同时间窗口内的状态,以便快速查询。
    • 构建算法:
      • 通过对图进行多次遍历,依次计算每个顶点在各个时间窗口内的(α, β, T)-core状态,并将这些状态存储在VH-Index中。
  2. 时间分区历史索引(TH-Index)

    • 步骤:

      1. 按时间窗口对图进行分割,计算每个时间窗口内的(α, β, T)-core顶点集合。
      2. 存储这些顶点集合,以便快速查询。
    • 构建算法:

      • 对于每个时间窗口,计算(α, β, T)-core,并将结果存储在相应的时间分区中。

        在这里插入图片描述

  3. 时间交集索引(TH-Index)*:

    • 步骤:
      1. 选取代表性的时间点,计算这些时间点内的(α, β, T)-core。
      2. 存储这些代表性时间点的结果,减少冗余信息。
      3. 在查询时,通过这些代表性时间点进行交集计算,快速得到查询结果。
    • 构建算法:
      • 通过逐步增加时间窗口的大小,计算并存储代表性时间点的(α, β, T)-core,并将结果存储在TH*-Index中。

查询

  1. 基于顶点分区历史索引(VH-Index)的查询
    • 步骤:

      1. 根据查询参数α、β和时间窗口T=[ts, te],在VH-Index中查找每个顶点u的状态。
      2. 通过二分搜索找到满足条件的时间窗口,收集符合条件的顶点。
    • 算法

      def query_vh_index(VH_Index, alpha, beta, ts, te):
          result = set()
          for vertex in VH_Index:
              time_windows = VH_Index[vertex][alpha][beta]
              for window in time_windows:
                  if window.start >= ts and window.end <= te:
                      result.add(vertex)
          return result
      
  2. 基于时间分区历史索引(TH-Index)的查询
  • 步骤:
    1. 根据查询参数α、β和时间窗口T=[ts, te],在TH-Index中查找相应时间窗口内的顶点集合。
    2. 通过二分搜索找到符合条件的顶点集合,返回结果。
  • 算法
def query_th_index(TH_Index, alpha, beta, ts, te):
    result = set()
    for t in range(ts, te + 1):
        if TH_Index[alpha][beta][t]:
            result.update(TH_Index[alpha][beta][t])
    return result
  1. 基于时间交集索引(TH*-Index)的查询
  • 步骤:

    1. 根据查询参数α、β和时间窗口T=[ts, te],分别在TH*-Index的前向索引和后向索引中查找符合条件的顶点集合。
    2. 计算前向索引和后向索引的交集,得到最终结果。
  • 算法

    def query_th_star_index(TH_Star_Index, alpha, beta, ts, te):
        forward_result = set()
        backward_result = set()
        
        # 查询前向索引
        for t in range(ts, TH_Star_Index.max_time):
            if TH_Star_Index.forward[alpha][beta][t]:
                forward_result.update(TH_Star_Index.forward[alpha][beta][t])
        
        # 查询后向索引
        for t in range(te, -1, -1):
            if TH_Star_Index.backward[alpha][beta][t]:
                backward_result.update(TH_Star_Index.backward[alpha][beta][t])
        
        # 计算交集
        return forward_result.intersection(backward_result)
    

实验结果

  1. 实验设置:实验在10个真实数据集上进行,评估模型和算法的性能。

  2. 结果分析:结果表明,提出的模型和算法在不同数据集上的表现优异,查询效率和索引构建时间均有显著提升。

    在这里插入图片描述

    图7展示了不同数据集上构建TH*-Index的内存使用情况和时间成本。黑色柱状图表示原始图的大小,白色柱状图表示TH*-Index的大小,折线图(带三角形标记)表示构建TH*-Index所需的时间。可以观察到,大多数情况下,TH*-Index的大小显著大于原始图的大小,这表明索引构建会增加内存开销。同时,构建TH*-Index的时间随数据集大小的增加而显著增加,尤其是在较大的数据集(如RU)上,构建时间超过了10^5秒。尽管构建TH*-Index需要较大的内存和时间成本,但它显著提高了查询效率,特别是在需要频繁查询的大规模时间双向图上。因此,对于这些场景,构建TH*-Index是值得的,而在较小数据集或查询频率较低的场景下,则需要权衡索引构建的必要性。

    在这里插入图片描述

结论

本文提出了第一个适用于时间双向图的凝聚子图模型(α, β, T)-core,并设计了高效的索引结构和算法。通过大量实验验证,本文提出的方法在实际应用中具有很高的效率和实用性。未来的研究方向可以包括进一步优化索引结构和算法,以处理更大规模的时间双向图。此外,可以探索该模型在更多实际应用中的潜力,例如社交网络中的社区检测、电子商务中的推荐系统、以及生物网络中的功能模块识别等。这些应用可以利用本文提出的模型和算法,来有效地分析和挖掘数据中的动态关系,从而提供更有价值的见解和服务。

论文地址:https://www.researchgate.net/publication/382506975_Querying_Historical_Cohesive_Subgraphs_Over_Temporal_Bipartite_Graphs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows docker容器部署前端项目

一、介绍 Docker 是一个开源的平台&#xff0c;旨在简化应用程序的开发、部署和运行。它通过使用容器&#xff08;containers&#xff09;来实现这一点。容器是一种轻量级、可移植的虚拟化方式&#xff0c;可以在不同的环境中一致地运行软件。 Docker 的主要作用和优点包括&a…

C语言 ——— 学习、使用memcpy函数 并模拟实现

目录 memcpy函数的功能 学习memcpy函数​编辑 使用memcpy函数 模拟实现memcpy函数 memcpy函数的功能 memcpy函数是内存拷贝函数&#xff0c;用于把任意类型的数据的内存拷贝到另一个同类型的数据上 学习memcpy函数 函数的参数&#xff1a; void* destination&#xff1…

C++基础编程的学习2

has-a&#xff08;组合关系&#xff09; 在C中&#xff0c;has-a关系是一种对象之间的组合关系&#xff0c;表示一个类的对象包含另一个类的对象作为其成员。 前向引用说明 在全局命名作用域中声明函数&#xff0c;可以避免递归调用时的函数重名问题。前向声明允许我们声明一…

使用Pinata在IPFS上存储NFT图片的实践

文章目录 前言一、什么是IPFS&#xff1f;二、为什么NFT需要IPFS&#xff1f;三、 Pinata&#xff1a;IPFS上的存储解决方案四、 实践&#xff1a;使用Pinata存储NFT图片1. 注册2. 获取API密钥与网关3. 上传图片到IPFS 总结 前言 随着区块链技术的快速发展&#xff0c;NFT&…

【iOS】OC关键字总结及底层原理(下)

目录 weak实现原理objc_initWeak()objc_storeWeak()weak_register_no_lock()weak_entry_for_referent()dealloc关于弱引用的处理weak相关问题 __autoreleasing关键字自动释放池__autoreleasing修饰变量 weak实现原理 weak弱引用指针会存储在SideTable里的weak弱引用表里面&…

实验室冷冻干燥机的安装与调试步骤

实验室冷冻干燥机是一种重要的科研设备&#xff0c;广泛应用于生物、化学、食品科学等领域。正确安装与调试冷冻干燥机&#xff0c;不仅能确保设备的正常运行&#xff0c;还能延长其使用寿命。本文将详细介绍实验室冷冻干燥机的安装与调试步骤&#xff0c;帮助用户顺利完成设备…

Java中等题-最大子数组和(力扣)

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;…

SSM城市垃圾分类管理系统-计算机毕业设计源码44582

摘 要 在当前全球环境问题日益突出的背景下&#xff0c;城市垃圾分类成为推动可持续发展和环境保护的重要举措之一。然而&#xff0c;传统的垃圾处理方式存在效率低下、资源浪费和环境污染等问题。因此&#xff0c;开发一个基于Java编程语言、MySQL数据库和HTML前端技术的高效…

vue()

目录 首先我们回顾一下之前学的东西 入门&#xff1a; v-bind 绑定属性用法 ​编辑 v-if 用法 v-for v-on v-model&#xff1a;双向绑定 组件&#xff1a; 全局组件&#xff1a; 局部组件&#xff1a; vue生命周期&#xff1a;&#xff08;这里让我研究研究&…

C++ 函数模板和类模板

参考视频&#xff1a;C类模板_哔哩哔哩_bilibili 遗留问题&#xff1a;编译器怎么处理函数模板和类模板 目录 一、为什么会有函数模版&#xff1f;函数模板是为了解决什么问题&#xff1f; 二、函数模板的概念 三、函数模版的使用 四、函数模板的特化 五、类模板的概念 …

24/8/7 算法笔记 支持向量机回归问题天猫双十一

import numpy as np from sklearn.svm import SVR import matplotlib.pyplot as plt X np.linspace(0,2*np.pi,50).reshape(-1,1) y np.sin(X) plt.scatter(X,y) 建模 线性核函数 svr SVR(kernel linear) svr.fit(X,y.ravel())#变成一维y_ svr.predict(X) plt.scatter(…

heapq.heapify构建小顶堆的流程

代码示例 import heapqlst [2, 3, 4, 6, 9, 1, 5] heapq.heapify(lst) print(lst)流程解释 初始列表: 列表 lst 在开始时是 [2, 3, 4, 6, 9, 1, 5]。 调用 heapq.heapify(lst): heapify 函数将 lst 转换为一个小顶堆&#xff08;min-heap&#xff09;。在小顶堆中&#xff0…

Spring框架漏洞(附修复方法)

Spring是Java EE编程领域的一个轻量级开源框架&#xff0c;该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建&#xff0c;是为了解决企业级编程开发中的复杂性&#xff0c;业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应…

《UniverSeg: Universal Medical Image Segmentation》ICCV2023

摘要 这篇论文提出了一种名为 UniverSeg 的方法&#xff0c;它能够解决未见过的医学图像分割任务&#xff0c;而无需额外的训练。现有的深度学习模型通常无法泛化到新的解剖结构、图像模式或标签上。UniverSeg 利用一种新的 CrossBlock 机制&#xff0c;通过查询图像和定义新分…

利用tkinter制作简易计算器,页面美观,计算保留4位小数

import tkinter as tk import time window tk.Tk() window.title("简易计算器") window.geometry(300x400) content def btn_onclick(data):global contentif data"AC" or data "MC":expression.set()result.set()content elif data :result…

无人机长生不老秘籍

机身保养 外观检查 1.检查机器表面整洁无划痕无针孔凹陷擦伤、畸变等损坏情况 2.晃动机身&#xff0c;仔细听机身内部有无松动零件或者螺丝在机身内部 桨叶检查 1.有无裂痕、磨损、变形等缺陷&#xff0c;如有明显缺陷建议更换 2.卡扣、紧固件有无松脱或失效&#xff0c;…

嵌入式学习之路 14(C语言基础学习——指针操作一维整型数组)

一、指针基础 指针的概念 地址表示内存单元的编号&#xff0c;也被称为指针。指针既是地址&#xff0c;也是一种专门用于处理地址数据的数据类型。 例如&#xff0c;变量a的地址或者十六进制表示的0x1000都可以视作指针。 指针变量的定义 语法&#xff1a;基类型 * 指针变…

探索灵办AI:智能办公的好帮手

引言 随着AI工具的增多&#xff0c;选择合适的AI助手变得尤为重要。ChatGPT的订阅费用高且功能单一&#xff0c;很多小伙伴开始寻找更具性价比和多功能的替代品。灵办AI以其便捷、高效、多功能的特点&#xff0c;成为许多朋友的新宠。 灵办AI助手是一款多功能的全能AI助手&am…

智能名片信息交流系统应用场景解决方案

智能名片作为传统名片在数字化时代的进化产物&#xff0c;集成了移动互联网、大数据和人工智能等先进技术&#xff0c;为商务交流和客户关系管理带来了全新的体验。 系统主要功能 01内容聚合与展示 企业信息展示&#xff1a;智能名片不仅包含个人基本信息&#xff0c;还能展示…

MDIO C22协议访问MMD寄存器

以太网PHY芯片中SMI(Serial Management Interface)串行管理接口,也称MDIO(Management Data Input/Output),通常作为MII管理接口(MII Management Interface)。有两根线,分别为双向的MDIO和单向的MDC,用于以太网设备中上层对物理层(PHY)的管理。 MDIO接口有两种协议…