当前位置:首页 » 操作系统 » 无环图算法

无环图算法

发布时间: 2022-09-25 11:46:22

Ⅰ 请教无向无环图最长路径算法

无向无环图就是树,
从根出发:
如果是计算最多的路径,就用广度优先(层次遍历)就可以了,最后访问的顶点一定是最多的路径的
如果是计算最长的路径长度,直接将上面的算法改一下,每个顶点时记下前面的来路的值加上现在的,就可以求出最大值
或者直接用Dijkstra 算法就可以了

Ⅱ 一个有向无环图的拓扑排序序列是唯一的么

AOV网络构造的拓扑序列的拓扑排序算法主要通过以下两个步骤循环,直到没有度为0的顶点,选择度为0的顶点,输出,从网络中删除这个顶点和所有向外的边。

在循环结束时,如果输出的顶点数小于网络中的顶点数,则会输出“loop”信息,否则,输出顶点序列就是拓扑序列。

利用AOV网络构建拓扑序列的实际意义是:如果按照拓扑序列的顶点顺序,在启动每个活动时,可以保证其所有前体活动都已完成,从而使整个项目有序进行,不会产生冲突。

(2)无环图算法扩展阅读:

拓扑排序是一个DAG(有向无环图)的所有顶点的线性序列。序列必须满足以下两个条件:每个顶点只出现一次。如果从顶点A到顶点B有一条路径,那么在序列中顶点A出现在顶点B之前。

拓扑排序通常用于确定事物在一组依赖项中发生的顺序。例如,在日常工作中,一个项目可能分为A,B,C和D,但取决于B和D和C取决于D计算项目的顺序,关系集可以拓扑排序产生一个线性序列,和第一个任务是需要首先完成。

Ⅲ 怎样求一个有向无环图的拓扑排序序列总数

(1)
设对有向无环图G=,求得它的一个拓扑序列为S,
初始化S为空,然后每次从G中选取一个入度为0的点v,将v插入到S的尾部,再在G中删除点v,并删除所有以v为弧尾的边(即由v引出去的边),如此循环,直到图G中的V为空集时结束.
2
1 2 3 4 5 6 7 8
1 3 2 4 5 7 6 8
3 1 4 2 5 6 7 8
3 1 2 5 4 7 8 6

Ⅳ 无向图中查找环的算法有哪些

比较直观的办法是,从初始结点 S 开始,用深度优先的方法遍历图的结点,如果在这个过程中,你遇到了一个先前就已经发现过的结点(假定它叫 V),说明存在一个环。
如果你想输出这个环,那么就从 V 沿路返回,直到又遇到 V,途中经过的所有结点就组成了这个环。

Ⅳ 有谁知道能解释一下有向无环图(DAG)么怎么用程序做出来,及怎么应用到经济学实证上

我们说区块链目前还不成熟,有各种各样的问题,比如说处理速度慢、手续费高昂、存在安全隐患等等,这些都是用户最直观的体验,体验不是太好。区块链还有一个问题,那就是高并发问题。
高并发问题是怎么回事呢,我们简单说一下。高并发是计算机领域的问题,简单来讲,高并发问题就是系统无法顺利同时运行多个任务。
很多任务同时运行,一大堆用户涌进来,系统承受不住这么多的任务,会出现高并发问题,你的系统就卡住了,就好比春运时候,12306系统总是卡住,有可能就是高并发问题造成的。
传统互联网尚且存在高并发问题,区块链网络自然也存在这个问题,毕竟区块链的成熟程度比起传统互联网,还有很大的差距。但是,如果没有安全、可靠和高效的公链,整个区块链产业的发展都将受到严重制约,应用落地也是空谈。
在这种背景下,DAG 技术就被提出来了,DAG 的全称是“Directed Acyclic Graph”,中文翻译为“有向无环图”。
DAG有向无环图是怎么回事呢,它到底能起到什么作用呢?我们下面解释一下。
一、DAG:一个新型的数据结构
DAG,中文名字叫“有向无环图”,从字面意思看,“有向"就是说它是有方向的,
“无环”就是说它是没有环路的、不能形成闭环的。所以,DAG其实是一种新型的数据结构,这个数据结构是有方向的,同时又是不能形成闭环的。
传统区块来讲,我们总是以“区块”为单位,一个区块里往往包含了多笔交易信息。而在DAG中,没有区块的概念,而是以“单元”为单位,每个单元记录的是单个用户的交易,组成的单元不是区块,而是一笔笔的交易,这样一来,可以省去打包出块的时间。
简单来说,区块链和DAG有向无环图最大的区别就是:区块链是一个接一个的区块来存储和验证交易的分布式账本,而DAG则是把每笔交易都看成一个区块,每一笔交易都可以链接到多个先前的交易来进行验证。
二、DAG 的工作原理
传统区块链上,就拿比特币来讲,它是单链式的结构,区块与区块之间按照时间戳的先后顺序排列开来(如图一),数据记录在一条主链上。用不太恰当的比喻来讲,这个
“单链式”结构是一条一字排列的链。
区块链只有一条单链,打包出块就无法并发执行。新的区块会加入到原先的最长链之上,所有节点都以最长链为准,继续按照时间戳的顺序无限蔓延下去。而对于DAG来讲,每个新加入的单元,不仅只加入到最长链的一个单元,还要加入到之前所有的单元(如图二)。
举个例子:假设我发布了一个新的交易,此时DAG结构已经有2个有效的交易单元,那么我的交易单元会主动同时链接到前面的2个之中,去验证并确认,直到链接到创世单元,而且,上一个单元的哈希会包含到自己的单元里面。
换句话说,你要想进行一笔交易,就必须要验证前面的交易,具体验证几个交易,根据不同的规则来进行。这种验证手段,使得DAG可以异步并发的写入很多交易,并最终构成一种拓扑的树状结构,极大地提高扩展性。
依据DAG有向无环图,每一笔交易都直接参与了维护全网。当交易发起后,直接广播全网,跳过矿工打包区块阶段,这样就省去了打包交易出块的时间,提升了区块链处理交易的效率。
随着时间递增,所有交易的区块链相互连接,形成图状结构,如果要更改数据,那就不仅仅是几个区块的问题了,而是整个区块图的数据更改。DAG这个模式相比来说,要进行的复杂度更高,更难以被更改。
总结一下,DAG作为一种新型的去中心化数据结构,它属于广义区块链的一种,具备去中心化的属性,但是二者的不同之处在于:
区块链组成单元是Block(区块),DAG组成单元是TX(交易)。
区块链是单线程,DAG是多线程。
区块链所有交易记录记在同一个区块中,DAG每笔交易单独记录在每笔交易中。
区块链需要矿工,DAG不需要矿工。
三、 DAG 的代表:IOTA
DAG当前的代表项目,最知名的无疑就是 IOTA。可以说,正是因为IOTA这个币种在 2017年下半年冲进市值排行第四位,才使人们真正认识到了它的底层技术:DAG有向无环图。
IOTA在DAG有向无环图的基础上提出了“缠结”概念,在IOTA里面,没有区块的概念,共识的最小单位是交易。每一个交易都会引用过去的两条交易记录哈希,这样前一交易会证明过去两条交易的合法性,间接证明之前所有交易的合法性。这样一来, 就不再需要传统区块链中的矿工这样少量节点来验证交易、打包区块,从而提升效率,节省交易费用。
四、 DAG 的现状
尽管理论上来讲,DAG有向无环图能够弥补传统区块链的一些弊端,但是目前并不成熟,应用到数字货币领域的时间也比较短,还比较年轻 。
它没有像比特币那般经过长达10年的时间来验证整个系统的安全性,也没有像以太坊那般实现了广泛的应用场景。不过,现在有些声音提出要采用“传统区块链+DAG”的数据结构,但是还没有非常突出的案例,这里就不多说了。
总结一下,本节我们介绍了区块链的衍生技术:DAG有向无环图,这是一种全新的数据结构,可以对区块链处理交易的效率、并发力达到显着的提升。

Ⅵ 请教无向无环图最长路径算法

无向无环图就是树,
从根出发:
如果是计算最多的路径,就用广度优先(层次遍历)就可以了,最后访问的顶点一定是最多的路径的
如果是计算最长的路径长度,直接将上面的算法改一下,每个顶点时记下前面的来路的值加上现在的,就可以求出最大值
或者直接用Dijkstra
算法就可以了

Ⅶ 判断给定的图是否是有向无环图1

判断无向图中是否存在回路(环)的算法描述 如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。 算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。 如果最后还有未删除顶点,则存在环,否则没有环。 有向图是否有环的判定算法,主要有深度优先和拓扑排序2中方法。 拓扑排序,如果能够用拓扑排序完成对图中所有节点的排序的话,就说明这个图中没有环,而如果不能完成,则说明有环。

Ⅷ 遍历的递归与非递归算法,判断是否是有向无环图,并输

基本思想:首先从图中某个顶点v0出发,访问此顶点,然后依次从v0相邻的顶点出发深度优先遍历,直至图中所有与v0路径相通的顶点都被访问了;若此时尚有顶点未被访问,则从中选一个顶点作为起始点,重复上述过程,直到所有的顶点都被访问。可以看出深度优先遍历是一个递归的过程。

Ⅸ 建立有向无环图的存储结构,设计实现求拓扑排序的算法

拓扑排序常见的有两种算法,一种是反复找入度为0的点,一种是利用DFS时的时间戳来求拓扑序

下面的程序时后一种算法,图用临界表存储,在遍历的同时,完成了拓扑排序
#include<cstdio>
#include<cstring>
struct edgetype
{
int to;
edgetype *next;
} edge[1000000];
edgetype *link[10000];
int n , m, DFStime;
int reach[10000], order[10000];
bool DFS(int now)
{
if (reach[now] == 2) return true;
if (reach[now] == 1) return false;
reach[now] = 1;
for (edgetype *e = link[now]; e; e = e -> next)
if (!DFS(e -> to)) return false;
reach[now] = 2;
order[DFStime++] = now;
return true;
}

int main()
{
scanf("%d%d" ,&n, &m);
for (int i = 0; i < m; ++i)
{
int a,b;
scanf("%d%d",&a,&b);
edge[i].to = b;
edge[i].next = link[a];
link[a] = edge + i;
}
memset(reach , -1, sizeof(reach));
DFStime = 0;
for (int i = 0; i < n; ++i)
if (reach[i] == -1)
if (!DFS(i))
{
puts("There is a cycle in the graph!");
return 0;
}
for (int i = n - 1; i >= 0; --i)
printf("%d ", order[i]);
}

Ⅹ 编写一个算法,给有向无环图G中每个顶点赋以一个整数序号,并满足以下条件

拓扑排序
先统计所有点的入度。
然后把当前剩下的点中入度为0的点编号,把这个点删去,更新与它相邻的点的入度。重复直到所有点处理完

热点内容
苹果自带脚本 发布:2024-05-03 07:16:04 浏览:568
商城导航源码 发布:2024-05-03 07:14:15 浏览:551
shell脚本日志输出 发布:2024-05-03 06:31:04 浏览:713
服务器快捷方式是什么意思 发布:2024-05-03 06:28:18 浏览:108
我的世界怎么成为服务器最靓的仔 发布:2024-05-03 06:26:44 浏览:853
安卓手机用博雅mm1用什么软件 发布:2024-05-03 06:19:23 浏览:693
算法键值 发布:2024-05-03 06:16:52 浏览:5
qq密码哪里开启 发布:2024-05-03 06:03:23 浏览:579
全排列的递归算法 发布:2024-05-03 05:42:28 浏览:901
肥胖的算法 发布:2024-05-03 05:38:09 浏览:783