史上最清晰的Tarjan算法详解华为云开发者之家

对于语义的分析,我们采用的控制流和数据流也都无一例外的采用了以图为基础的算法,通过图的可达性,来完成变量、表达式的可达分析,以及变量的依赖分析、值流图等等。

图的算法是进行静态分析的基础数据算法,如何提高图的分析效率,就需要对图的算法有进一步的认识。

1986年的图灵奖是JohnE.Hoperoft和RobertE·Tarjan两人共同获得,而且RobertE·Tarjan曾是JohnE.Hoperoft的学生,他们的密切合作取得了算法设计与分析方面的卓越贡献,赢得了1986年度美国计算机协会(AssociationforComputingMachinery,ACM)图灵奖的荣誉。

在领奖的时候,JohnE.Hopcroft做了一个“计算机科学:一门学科的出现”的演讲,从他自己的经历出发,展现了计算科学在那个风起云涌的年代形成的过程。

那个时候,计算机科学的大部分课程的内容都是围绕着数字计算机电路的设计以及如何减少构造这些电路所需要的晶体管数展开的。然而,到了六十年代中期,技术的进步已使得晶体管马上就要被每片有多达几百个元件的计算机芯片所取代。因此,减少晶体管数再没有么意义,那时所谓的计算机科学的课程即将过时,必须发展新的课程。

Hopcroft并没有接受过正规计算机教育,只是他在斯坦福大学读电器工程学博士的时候,上过DavidHuffman(霍夫曼编码的发明者)教的一门计算机课程,学习了开关电路、逻辑设计以及计算理论的基本知识。普林斯顿要Hoperoft在自动机理论方面开设一门新的课程,当时没有任何教程可以参考,只给了他推荐了6篇论文。其中包括:

1967年,Hopcroft转去康奈尔大学,转而研究算法与数据结构。他相信理论计算机科学的方法学,可以用来为算法设计发展一种科学基础,这对于实践者将是很有用的。

Hopcroft在发言的最后,还不忘呼吁,为了保持美国取得的技术和经济的领导地位,必须对计算机科学进行全国性的投入和支持。

说到Tarjan,他在图论算法和数据结构领域有很大的贡献。下面对这个大牛也做个简单的介绍。

Tarjan在1969年获得了加州理工学院数学学士学位。在斯坦福大学,他获得了他的计算机科学硕士学位(1971)和博士学位(1972).Tarjan从1985年开始任教于普林斯顿大学。

Tarjan还拥有很多研究所和公司的工作经验,例如:AT&T贝尔实验室、NEC研究所、InterTrustTechnologies、康柏、惠普、微软等。

Tarjan是一个非常高产的计算机科学家,从计算机科学出版物在线参考网站dblp收集的有关他发表在的杂志、会议和出版物,多达300+。

他独立研究的算法有:Tarjan离线的LCA算法(一种优秀的求最近公共祖先的线性离线算法)、Tarjan强连通分量算法(甚至比后来才发表的Kosaraju算法平均要快30%)、Hopcroft-Tarjan算法(第一个平面性测试的线性算法)。

他还开发了一些重要的数据结构,比如斐波那契堆(FibonacciHeap,插入查询合并O(1),删除O(logn)的强大数据结构)、伸展树(SplayTree,和另外一位计算机科学家共同发明)、动态树(Link-CutTree,发明人之一)。

下图是他普林斯顿大学个人简介中的一个插图,这个是他的另一个重要的研究领域:自适应搜索树的查询(self-adjustingsearchtree),在树的遍历过程中,改变树的结构以提高树的搜索效率。

他的主要荣誉:

图的一些基本概念:

Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。

oLOW(u)为u或u的子树能够追溯到的最早的栈中节点的次序号;由定义可以得出,当DFN(u)=LOW(u)时,以u为根的搜索子树上所有节点是一个强连通分量。

1)如果v不在栈中(树枝边),DFS(v),并且LOW[u]=min{LOW(u),LOW(v)};

2)如果v在栈中(前向边/后向边),此时LOW[u]=min{LOW[u],DFN[v]}

0.求下面有向图的强连通分量

1.从节点0开始DFS:

2.返回节点4:

3.返回节点2:

4.从节点2继续搜索到节点3:

5.返回节点2;

6.返回节点0;

7.从节点0继续搜索到节点1;

8.返回节点0;

为了便于后期的扩展,适用更为广泛的图运算。这里算法的实现中,图的表示采用了Googleguava库中的common.graph,你需要在pom.xml中加入guava的依赖包如下:

为了和举例中图的特征保持一致,图结构采用guava里的MutableGraphgraph,Integer的值表示结点的编号。例如graph.putEdge(0,2);表示增加一条有向边,从结点0指向结点2,graph会判断结点0和2是否存在结点中存在,如不存在,则会增加相应的结点。

大家可以根据自己的需要采用不同的图结构。

验证代码使用junit完成结果的验证。生成可变图graph里面的:incidentEdgeOrder(ElementOrder.stable()),是为了保证关联边的读取时和输入的顺序一致,以便得到和前面演算过程的一致性的结果.

THE END
1.佳文推荐跨设备联邦学习中的客户端选择算法海量异构客户端中选择合适的集合参与训练, 以优化联邦学习协议的资源消耗和模型性能被广泛研究, 但仍没有文献对这一关键问题进行综合调研. 需要对跨设备联邦学习的客户端选择算法研究进行全面调研. 具体地, 形式化描述客户端选择问题, 然后给出对选择算法的https://mp.weixin.qq.com/s?__biz=MzU0NjM2NzI5NQ==&mid=2247488223&idx=2&sn=c2cb5c2b4bca30487ce9402a54a5c241&chksm=fa5b3abce10a3ba41d104889fd7778194cf093b88d46496f9babaf5f51f06cdf8ac89ed6d5ee&scene=27
2.离线算法vs在线算法离线和在线不是具体的某种算法公式,而是一种思维模式,取决于在所给的问题背景下,数据资源是否能够通盘考虑,或是现实场景中不断地有新数据介入 离线算法(OfflineAlgorithm) 离线算法是指在开始处理数据之前,所有需要的输入数据都是已知的。算法可以一次性读取所有数据,然后进行处理。离线算法通常用于批处理场景,例如数据https://blog.csdn.net/m0_61678439/article/details/141088418
3.机器学习RLHF:在线方法与离线算法在大模型语言模型校准中的然而,随着离线对齐算法的迅速崛起,RLHF所面临的挑战也日益严峻。本文将从RLHF的基本概念入手,探讨在线方法与离线算法在大型语言模型校准中的优劣,并通过实验和代码实例加以佐证。 二、RLHF概述 RLHF是一种结合人类反馈与强化学习的技术,旨在通过人类反馈来优化语言模型的输出。其基本思想是通过预先训练好的语言模型生成https://developer.aliyun.com/article/1542161
4.TheZealous的集训日常之离线算法与在线算法区别TheZealous1.离线算法:就是在处理之前必须得到所有数据的算法,像是线段树之类的。这类算法一般不依赖于预处理,只是在多次请求后集中处理问题。 2.在线算法:和离线算法相反,在线算法处理问题时无须得知所有数据,每次得到请求后及时处理,等待下个请求,像是st之类的。这类算法比较依赖于预处理,预处理过后,处理每次请求能更快一点https://www.cnblogs.com/TheZealous/p/15130679.html
5.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客尽管这些假设听上去似乎是对的,但实验结果表明它们无法可信地解释在线和离线算法的性能差距。 他们通过消融研究发现,提升离线优化的一种有效方法是生成分布上接近起始 RLHF 策略(这里就刚好是 SFT 策略)的数据,这本质上就模仿了在线算法的起始阶段。 优化性质 https://www.thepaper.cn/newsDetail_forward_27434433
6.基于数据的ADP离线值迭代算法和在线Q学习算法研究针对上述存在的问题,结合自适应动态规划离在线实现的优缺点,本文提出一种先离线后在线的自适应优化控制方法,即:在被控对象未知的情况下,采用基于数据自适应动态规划离线值迭代算法首先对系统进行离线优化控制,再使用在线Q学习策略迭代算法对离线优化控制进行在线改善。这种先离线后在线的基于数据的自适应优化控制方法,可以https://cdmd.cnki.com.cn/Article/CDMD-10593-1012496385.htm
7.人工智能团队研究成果在TKDE发表:样本高效的离线转在线强化学习算法近期,吉林大学人工智能学院、未来科学国际合作联合实验室人工智能团队在IEEE Transactions on Knowledge and Data Engineering上发表题为“Sample Efficient Offline-to-Online Reinforcement Learning”的研究工作。该研究提出了一种样本高效的离线转在线强化学习算法,通http://icfs.jlu.edu.cn/info/1007/3101.htm
8.推荐系统完整的架构设计和算法(协同过滤隐语义)流式训练:、流式训练模块的主要作用是使用实时训练样本来更新模型。推荐算法中增量更新部分的计算,通过流式计算的方式来进行更新。在线训练的优势之一,是可以支持模型的稀疏存储。训练方面,在线模型不一定都是从零开始训练,而是可以将离线训练得到的模型参数作为基础,在这个基础上进行增量训练。 https://cloud.tencent.com/developer/article/1508050
9.离线强化学习第三个实验,在线 DDPG 算法在训练完毕后作为专家,在环境中采集大量数据,供离线 DDPG 智能体学习。这 3 个实验,即完全回放、同步训练、模仿训练的结果依次如图 18-2 所示。图18-2 在线算法(橙色)和对应的离线算法(蓝色)的实验结果,从左到右依次为完全回放、同步训练、模仿训练https://hrl.boyuai.com/chapter/3/%E7%A6%BB%E7%BA%BF%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/
10.《高级算法设计与分析》试卷及答案卷2.docx最小生成树的总代价小于等于旅行商回路的总代价对T进行按先序往返遍历,其总代价小于等于2倍的旅行商回路的总代价算法的总代价大于等于对T进行按先序往返遍历的总代价下面对在线算法和离线算法比较,以下描述错误的是:即使数据在计算时都已知,也可以采用在线算法来达到更好的结果在线算法通常是近似算法通常通过和离线最https://www.renrendoc.com/paper/365498544.html
11.一文读懂深度学习算法的技术原理及5个领域实践(1图像2语音3文本深度学习在视频领域的应用主要集中在交通监管和目标跟踪上.杨红红等[48]构建了基于稀疏约束的 DAE 模型,以非监督训练监督式微调的方法来训练模型,将其运用到交通目标跟踪上.实验选取了一组视频,将IVT,MIL,OAB3种算法进行比较,最终发现,基于系数约束的 DAE 模型在不同的场景下都有较高的准确率.司朋举等[49]在https://zhuanlan.zhihu.com/p/370465231
12.美团点评容器平台HULK的调度系统调度计算模块(资源调度算法) HULK调度系统的调度计算方式与诸多业界调度系统类似,通过过滤+打分的方式筛选出“最优部署位置”: HULK调度任务 宿主机(Host):调度资源池中共享的宿主机集群,支持pool级别硬隔离,如在线服务与数据库/缓存的实例部署在不同的物理机集群中;支持资源软隔离,如在线服务离线任务混布部署,通过cgrhttps://tech.meituan.com/hulk_scheduler_introduction.html
13.在线匹配问题研究进展:如何应对一般图以及顶点全在线的挑战?在STOC90会议中,Karp, Vazirani和Vazirani三位学者首次提出了在线二分图匹配模型:假设存在一个潜在的二分图 其中一侧顶点为离线顶点(直接给定),而另一侧顶点为在线顶点(逐步到达)。我们要求算法在任何一个在线顶点输入的时间点(此时与中顶点的边同时给出),即时地决定是否将与中某一相邻顶点匹配,并且决策不能反悔。https://www.orsc.org.cn/wechat/article/detail?id=760
14.用于时间序列中的变点检测算法,你学会了吗?在离线分析中,我们能够利用时间序列的历史数据。对于 CPD,我们可以应用线性回归的概念。然而,如果存在变点,直线就无法很好地拟合数据,这时候分段线能够更好地适应数据。建立分段线的一种直观算法是确定变点作为断点。这种方法被称为 精确线性时间(PELT)。https://www.51cto.com/article/789591.html
15.基于改进人工势场法的无人机在线航路规划算法AET基于APF算法的在线航路规划在按照参考航路运行中,压线能力出众,并有平滑航迹的功能。对改进后的无人机在线航路算法进行仿真,首先对无人机的航路进行离线规划,设置禁飞区后规划无人机参考航路和新的雷达威胁源,在线规划结果如图8所示。 由图8可以看出,自适应APF和传统APF方法在应对雷达威胁源的处理基本相似,均能尽可能http://www.chinaaet.com/tech/designapplication/3000079906
16.赵伟平台营销的算法欺骗风险及其法律规制虽然营销人员长期以来一直使用测试来预测哪些广告最有效,但离线的人工指导和在线的实时机器控制的实验之间的差异是深远的。算法的速度和规模使人们能够进入一个普通人类迭代无法探索的巨大设计空间。2020年的一项实验显示,平台营销文本的转化率是基于人类营销人员目标文本的13倍。在追求准确性和速度的过程中,机器正在生成https://www.jfdaily.com/sgh/detail?id=827990
17.GitHubanttinyjs/binpacking算法的复杂度 底层max-rect-bin-pack算法 在线算法虽然效率更高,但是在线算法结果没有离线算法结果好。 上层 遗传算法 遗传算法的时间空间复杂参考paper。 大致上可以认为和种群中孩子个数和生态个数成正相关。 API & demo FindPosition 寻找矩形位置的五种策略。 https://github.com/ant-tinyjs/bin-packing-core
18.archlinux离线安装算法购买和安装(离线)离线安装DIS Logstash Plugin安装DIS Logstash Plugin有在线和离线安装两种方式:离线安装需要获取插件包并执行安装脚本。 前提条件 已安装PuTTY工具。 操作步骤 使用PuTTY工具(或其他终端工具)远程登录Logstash服务器。 进入到Logstash的安装目录。 来自:帮助中心 https://support.huaweicloud.com/topic/1177917-1-A
19.应用最小二乘一次完成法和递推最小二乘法算法的系统辨识最小二乘一次性完成算法是离线算法,需要采集大量数据,一次性完成计算,因此,数据计算量大,当数据量很大时,数据输入不方便,但在本课程设计过程当中,考虑到了此问题,运用相应的方法,解决了矩阵输入的问题。递推算法适合于在线算法,利用原有参数估计进行下一步估计,可以做到运算量小,实时进行估计,根据仿真结果图示,可以https://max.book118.com/html/2024/0207/6240152125010044.shtm
20.莫队算法(普通离线)离线”和“在线”的概念。在线是交互式的,一问一答;如果前面的答案用于后面的提问,称为“强制在线”。离线是非交互的,一次性读取所有问题,然后一起回答,"记录所有步,回头再做”。 基础的莫队算法是一种离线算法,它通常用于不修改只查询的一类区间问题,复杂度为 ,没有在线算法线段树或树状数组好,但是编码很简单 https://www.jianshu.com/p/168a97cc7aa6