大图算法——《Computing top-k temporal closeness in temporal networks》论文随记
一. 总体概述
了解关于图的紧密中心性(The closeness centrality)的定义,同时学习了时序(子)图的概念。作者在这篇文章中,使用标签设置策略设计了一种最快路径的算法来计算精确的顶部k时间紧密性值并且找到相应的顶点,并且在真实世界数据集中运行时间得到改进。此外,导出了在真实数据集上表现良好的启发式修改,并大大减少了运行时间,只导致了所有数据集的很小错误。对于所有边的边遍历所需时间相等的情况,我们将两种近似算法提升到时域,估计可达顶点的数量以及近似所有顶点的接近度。在真实世界数据集上对我们的所有新方法进行了实验评估,并表明在许多情况下,它们在保持高质量的同时大大减少了运行时间。同时也证明top-k时间紧密性相比其他的方法更有效的找到时间图中最相关的顶点。
二.重要概念总结
- Closeness Centrality(紧密性中心性):是一种检测能够通过子图有效传播信息的节点的方法。紧密性中心性计量一个节点到所有其他节点的紧密性(距离的倒数),一个拥有高紧密性中心性的节点拥有着到所有其他节点的距离最小值。其中 u 是我们要计算紧密性中心性的节点,n 是网络中总的节点数,d(u,v) 代表节点 u 与节点 v 的最短路径距离。更常用的公式是归一化之后的中心性,即计算节点到其他节点的平均距离的倒数。
- Harmonic Centrality(调和中心性):针对非连通图计算中心性
- Temporal in-closeness(时间紧密性)
- Harmonic temporal in-closeness(调和时间紧密性)被定义为到所有其他顶点的最快路径的长度的倒数之和。
- Temporal subgraph(时间子图):需要保证在规定的时间间隔I=[,],
- Harmonic Temporal Closeness(调和时间紧密性):对于在V中的顶点u和前面的中心性一样,归一化则与|V|作商。
- Harmonic Temporal in-Closeness:顾名思义,描述的是其他顶点到本顶点的调和时间紧密性。对于在V中的顶点u有:
- Top-k Harmonic Temporal Closeness Problem:找到前k个最大的调和时间紧密性,以及有这些值的顶点。
- 时间转置(temporal transpose):反转传统静态图的边,并允许搜索到即将到来的时间路径。
三.研究现状
1. 已有无权静态图的top-k紧密性计算(BFS),本文不同在于计算最快的时间路径,允许可变的过渡时间,考虑相应上限,即了考虑时间。
2. 已有动态图,可以动态的添加删除边。但没有考虑边的可用性(availability)以及过渡的时间(transition times)。
3. 已有加权无向图的接近度的随机近似算法。但也没有适用于含时间的情况,本文可以对时间紧密性进行近似。
4. 对于时间图,也有关于单位遍历时间图的研究。
四.算法详解
4.1 Temporal closeness 算法
用邻接表来装载每个点延伸出去的边。
4.1.1 标签设置算法(label setting fastest path)
标签设置为l=(v,s,a)表示一条从u到v的路径,u是当前顶点,v表示目标顶点。 s代表开始时间,a代表到达时间。对于每个顶点,都进行标签的保存,当标签进行更新的时候,需要进行标签的删除(删除旧标签的准则有1.当新标签和旧标签的开始时间相同,新标签比旧标签更早结束;2.当新标签更晚开始,同时新标签的结束时间不大于旧标签,两个标签相等时,保留一个)。另外对要处理的标签进行优先队列存储。如果算法最先发现v,那么最短持续时间(从u到v)则被找到。标签列表。
算法理解:首先while循环,直到优先标签队列为空同时F集合等于顶点全集,循环内容为从优先标签队列中提取最小的标签,接着看F集合中是否有v,如果没有,则初始化d[v]=a-s,然后F中加入v(逐渐让F走遍整个图)。接着进行for循环,对于v的每一个出边,都进行一下判断(这个判断是结合了时间间隔的判断,也就是要求开始时间和开始时间加上转换时间都要在时间间隔内部),在的话接着进行标签的迭代,不在则结束。标签的迭代部分需要判断是否是头顶点,头顶点和非头顶点(起始时间是否为零)将会带来不同的标签转换。更新完标签之后,进行标签的删减比较,若更新后标签并没有被优化掉,则在优先标签队列和标签列表中插入。针对这个算法,每次while循环都得到具有最小持续时间(a-s)的标签。在while循环的迭代过程中,顶点插入F集合,此时持续时间d[v]=a-s等于最快(u,v)路径的持续时间。作者使用归纳法证明了持续时间是会随着路径长度的增加而严格增加。
4.1.2 标号算法
标号算法(Labeling algorithms)是解决最短路径问题的一种重要方法,也是绝大多数最短路径算法的核心部分。
按照不同的标识结点处理策略,标号算法又可分为标号设定(Label Setting,简称LS)和标号改正(Label Correcting,简称LC)两大体系。
有关最短路径问题的两个经典算法,Dijkstra算法和Bellman-Ford算法,分别属于LS和LC。
LS算法通过迭代过程对label进行逐步修正,每次迭代均选择候选结点集中标号最小者退出候选结 点集,并将该结点标号从临时标号转变久为永久标号。这是一种基于贪心策略的最短路径算法,每一次转化为永久标号的label都代表到当前结点的最短路径,考虑的是“当前最优”。
LC算法在每次迭代时并不一定将任何结点标号从临时标号转变为永久标号,只是对临时标号进行一次修正,所有结点标号仍然为临时标号;只有在所有迭代终止时,所有结点标号同时转变为永久标号。LC算法考虑的是“最终最优”,最短路径需要等待多次迭代直到整个算法运行结束才能被确定。
4.2 Computing Top-k temporal closeness
为了计算上界,使用每次迭代都更新的顶点的两个成对的并集的子集(F和T),其中F包含u以及已经从u开始计算出来的时间距离。T中包含从v延伸的所有顶点w,其中v在F中,并且w不再F。本文确定了上界和下界以及运行时间。
4.3 启发性修改
两种修改方案:1.限定标签列表的大小(h),在对新标签添加的时候,如果此时标签的大小已经h,则丢弃掉。这样子运行时间也进行了改变,在内部for循环期间运行时间改变,顶点处的标签数量现在等于h,为每一个v掉用自适应最快路径算法。
2.当h=1的时候,防止忽略掉那些第一次被访问的顶点,在每个顶点存储一个标签,而不需要标签列表。每个顶点存储发现的最短持续时间的标签,类似Dijkstra。不需要优势检查,因为生成的标签总数一定是小于等于。
4.4 相等过渡时间的近似
两个近似,一个是可达顶点的数量,另一个是所有顶点的时间紧密性。
时间转置:反转传统静态图的边,并允许搜索到即将到来的时间路径。
4.4.1可达顶点的数量的近似
在时间间隔内增加开始或者到达的边,然后进行如下步骤:对每一个顶点从[0,1]中随机选择值。从1~h中进行for循环,对图G在时间间隔进行时间转置。对于所有V中的顶点在[0,1]中进行赋值。通过升序的方式对v进行排序。对1~n中进行for循环,计算R(v)并移除使用的边,对没有标记的v去设置。标记所有的在R中的v。
4.5 时间紧密性的近似
计算具有相等过渡时间的有向时间图中每一个顶点归一化时间紧密性的近似值。首先计算时间转置图,然后计算采样率,对于每一个顶点,确定所有顶点的最短持续时间。可以通过平均转置图中找到的d(v,u)来估计一个顶点的紧密性。
霍夫丁不等式(Hoeffding's inequality):在概率论中,霍夫丁不等式给出了随机变量的和与其期望值偏差的概率上限。
五.实验验证
考虑运行时间,在各种数据集上有相当大的改进。Top-k算法中随着k的增加,运行时间也会增加,因为计算上限在Top-k值的下端开始变慢。相对于较小的Infectious网络,近似值的处理无法改善运行时间,对于所有其他数据集,可达性近似减少了运行时间。结果显示,相似性非常高。使用第二种启发式算法运行时间紧密性算法,运行时间均低于精确算法,在几乎所有情况下都低于使用第一种启发式算法的时间,性能大幅度提高(在个别数据集中,却下降)。随着采样大小的增加,近似误差减少。Jaccard相似性很低,是由于有向时间边缘和时间限制的对称性缺失导致,具有高时间紧密性(closeness)的顶点和高时间in-closeness不同。
研究了顶点排名的不同方法的关系,使用相关系数测量了排名的相关性。给出所有数据集的相关矩阵,对于大多数数据集来说,按照度和时间紧密性排序的相关性非常强,高相关性的原因是在单位遍历时间的情况下,每个直接邻居顶点的时间接近度都会加一个值。大多数数据集的时间和静态紧密性的相关性很小。
模拟传染网络中信息传播的过程,分别选择top-k时间紧密度、top-k最高度、top-k静态紧密度、k个随机选择顶点。接着评估信息随着时间的传播情况(信息传播概率10%),最终的结果显示top-k时间紧密度作为一开始的种子时候,信息将分配给最多的人。时间紧密度在时间图中选择有影响的顶点是一种有用的启发式方法。
大图算法——《Computing top-k temporal closeness in temporal networks》论文随记相关推荐
- Top K算法问题的实现
前奏 在上一篇文章,程序员面试题狂想曲:第三章.寻找最小的k个数中,后来为了论证类似快速排序中partition的方法在最坏情况下,能在O(N)的时间复杂度内找到最小的k个数,而前前后后upd ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- 海量数据处理的 Top K算法(问题) 小顶堆实现
问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对整个输入数据的保存和排序是相 ...
- Top k问题(线性时间选择算法)
问题描述:给定n个整数,求其中第k小的数. 分析:显然,对所有的数据进行排序,即很容易找到第k小的数.但是排序的时间复杂度较高,很难达到线性时间,哈希排序可以实现,但是需要另外的辅助空间. 这里我提供 ...
- 典型的Top K算法_找出一个数组里面前K个最大数
原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...
- Top K 问题的最优解 - 快速选择算法(图解详细教程)
文章目录 Leetcode 215. Kth Largest Element in an Array 1.1:快速选择算法流程 1.2:注意事项 1.3:python实现 Leetcode 973. ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
一.问题 有 10 亿个不重复的数字,内存中只能放进 1 万个数,怎么找到最大的 10 万个数字? 这道题的思路是,先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的) ...
- 找出无序数组中最小的k个数(top k问题)
2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...
最新文章
- python操作系统-Python_操作系统的发展史
- VB.NET 委托处理 传递参数
- 2015春节期间读完两本书,立贴为证。
- DIP第四章习题解答
- 腾讯 QQ 看点图文多目标推荐实践经验
- 《Python Cookbook 3rd》笔记(2.12):审查清理文本字符串
- Python小白的数学建模课-23.数据拟合全集
- 小说精品屋plus v2.7.0源码
- 7-130 古风排版 (20 分)
- 【mybatis】 mybatis在mysql 更新update 操作 更新时间字段按照年月日时分秒格式 更新为当前时间...
- linux下 Tomcat 端口号修改
- 微信分享只有链接没有图标和标题正文
- 看 SICP 不如先看 The Little Schemer
- 什么是UE设计?UI设计又是什么?UE和UI有什么区别?
- C语言打印某一年的日历 (2*6格式)
- Redis数据结构:快速的Redis有哪些慢操作?
- hinge_在Swift中在iOS上重新创建Hinge的配置文件过渡
- pb模型转uff模型(tensorflow2.x)
- MEM/MBA数学强化(06)数列
- mobaxterm ssh密匙 登录被拒绝:server refused our key