Python生成依赖性应用的DAG(有向无环图)拓扑

本文介绍了一种使用Python生成有向无环图(DAG)拓扑的方法,特别适用于依赖性应用的表示。DAG包含一个入口节点和一个出口节点,中间节点具有不超过2的入度和出度。通过按拓扑序随机添加边,确保了DAG的无环特性。代码避免了入口到出口的直连边,以创建更符合实验需求的拓扑结构。
摘要由CSDN通过智能技术生成

因为研究方向设计到依赖性的应用,做实验需要用到一些随机的DAG(有向无环图)拓扑来作为应用的表示,找了找网上没有符合的代码,于是决定自己写个小脚本来生成大量随机的DAG拓扑。
我实验中要用到的依赖性应用拓扑类似于下面这种模式:在这里插入图片描述
观察到,DAG包括一个入口节点和一个出口节点,其余的节点都是具有依赖关系的中继节点
图中入口节点的入度和出口节点的出度都为0,其余任意节点都至少有一条入边和一条出边。
根据有向无环图的性质,每一个有向无环图中的所有节点能形成有限个拓扑序,拓扑序中的节点只能向后序的节点出边(即一条依赖边中的父节点在拓扑序中的顺序一定位于子节点前面)。那么给定一个拓扑序,只要通过按顺序遍历,以一定概率随机向后加边的形式,就能生成一个DAG。
根据我所需要应用的场景,拓扑图比较“窄”,因此我将除入口和出口之外中间节点的入度和出度都限制在2以内(也可以根据自己对形状的需求来调整参数)。
因为对遍历中的每对节点对,脚本都以一定概率加边或不加边,因此会出现没有出边或没有入边的中间节点。对没有入边的节点,添加一条入口节点到它的边,同理对没有出边的节点,添加一条它到出口节点的边。
在实际运行过程中发现,如果入口到出口节点有直连的边,形成的拓扑图会比较绕,因此脚本不会生成直连入口到出口的边。
最终代码如下:

import random
n = 8#节点数量
def prob_value(p):#一个按概率连边的函数
    q = int(10*p)
    l = [1]*q+[0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值