题目来自于友,今天无聊,试着把算法写出来活动一下脑子,题目如下:
有一个单入口,单出口的有向无环图。给出一个算法,在已有结点之间插入若干结点,使得从入口结点到出口结点经过的任意路径长度一致,详细描述你的算法思路,并分析其时间复杂度和空间复杂度。
分析:这个题的解显然是无数的,因为题目并没有限定任意路径长度的具体数字,只要一致即可。我们只考虑任意长度等于改图最大路径(长度),当然这里也没不要考虑权重。题目其实就变成了求任意节点P到结束点的最大路径,并平衡这个节点P到其后续节点最大路径差异。假设P有K个后续节点,N1,N2...,NK.我们知道P到结束点的最大路径Max(P)就等于Max(Max(Ni))+1,(i从1到K),而要最终任意路径长度一致,我们只要求出Max(P)后,对Max(Ni)进行对比,在P到Ni中插入Max(P)-1-Max(Ni)个节点即可,这种插入是不会影响到其它路径的。
1)算法实现:
struct Point
{
Point[] Nexts;//后续节点集合
bool Visited;//访问次数.
int MaxLen;
}
List<Point> Points;//这个集合包含所有的节点。目的主要是为了对图进行线性操作.
int MaxLength(Point p)
{
if(p.Visited==true)
{
return p.MaxLen;
}
p.Visited = true;
if(p.Nexts==null || p.Nexts.Length==0)
{
p.MaxLen = 1;
return 1;
}
int MaxLength = 0;
foreach(var item in p.Nexts)
{
int theLen = MaxLenght(item);
if(theLen>MaxLength)
{
MaxLength = theLen;
}
}
p.MaxLen = theLen+1;
foreach(var item in p.Nexts)
{
int InsertedPointCount = MaxLength-item.MaxLen;
Point P1 = p;
for(int i=1;i<= InsertedPointCount ;i++)
{
Point theTmp = new Point();
theTemp.MaxLen = item.MaxLen+(InsertedPointCount -i+1);
theTmp.Nexts.Add(item);
P1.Nexts.Remove(item);
P1.Nexts.Add(theTmp);
P1 = theTmp;
Points.Add(theTmp);
}
}
return p.MaxLen;
}
2)调用:开始节点为StartPoint.
初始化节点,主要是将访问标志和MaxLen进行重置,利用Points集合进行。
MaxLength(StartPoint).
3)分析:假设规模为n,时间复杂度主要是初始化,遍历和创建节点的时间,初始化的时间复杂度为θ(n),遍历的时间复杂度等于边数,最坏的情况是两两点之间都有连接,边数side=(n-1)n/2.那么时间复杂度T(n)<= n(n-1)/2=θ(n^2).创建节点的时间可以不考虑,那么这个算法的时间复杂度T(n)<=n(n-1)/2+n=θ(n^2).
空间复杂度:因为每个节点只会遍历一次,每访问一次,只需要常数个临时变量,因此其空间复杂度为Ω(n).(没有考虑补充节点部分)。
后记:关于拓扑结构的算法一般都非常具有实际应用价值,项目管理,流程优化,制造排程,产能预测等等,只是有的地方我们得通过一定的变换才能更好的应用.
分享到:
相关推荐
技术资料,关于机器人结构 拓扑 结构学,机器人结构理论
网络拓扑图动态线条实现
这个是介绍逆变器拓扑结构的资料,网上很少能查到这个逆变器的拓扑结构的
局域网设计方案网络拓扑结构图设计思路拓扑结构
网络拓扑结构的规划设计原则 网络拓扑结构设计主要是确定各种设备以什么方式相互连接起来。根据中小企业的网络规模,网络体系结构、所采用的协议,扩展和升级管理等各个方面因素来考虑。拓扑结构的设计直接影响到...
你可以在一个软件上面搭建你的 虚拟的网络拓扑结构示意图 更可以测试它的功能等等
绘制实验室机房拓扑结构网络图
大型图书馆一般性网络拓扑结构图,大型图书馆一般性网络拓扑结构图,大型图书馆一般性网络拓扑结构图
智能电力监控系统的网络拓扑结构设计.文章以智能电力监控系统的三层网络拓扑结构为核心,分析了网络拓扑结构的选配原则,流行的选配方案,以及网络管理子系统的重要性。
公司办公网需要接入互联网,公司只向ISP申请了一条专线,该专线分配了一个公网IP地址,配置实现全公司的主机都能访问外网。公司通过两台三层交换机连到公司出口路由器上,为了提高网络的可靠性,作为网络管理员,我...
电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf电源拓扑结构图.pdf
常用的十二种开关电源拓扑结构工作过程,公式及特点详解
下图是模拟某学校网络拓扑结构,在该校网络接入层采用S2126,接入层交换机划分了办公网VLAN20和学生网VLAN30,VLAN20和VLAN30通过汇聚层交换机S3550,与路由器A相连,另S3550上有个VLAN40,存放一台网管机,路由器A与B...
大学校园网的设计参考,有网络拓扑图,是我自己换的,有些问题。作为参考还是可以的。
计算机网络拓扑结构课件,学习的好资料,里面还有图片
无线传感器网络实验 五种网络拓扑结构的生成:总线型,星型,网状,树型,环型 语言:MATLAB+Python
PET)拓扑结构及优缺点进行分析,在此基础上,将谐振变换器及两电平方波变换器引入到传统级联型电力电子变压器,提出一种适用于中高压配电网的新型电力电子变压器拓扑结构。与传统PET相比,所提拓扑的优势在于可以...
常见的拓扑结构介绍;常见的拓扑结构介绍常见的拓扑结构介绍;常见的拓扑结构介绍
在研究拓扑约束时,我们可以将电路中的元件用线段代替,画成一些由线段组成的图,如图1(a)中的电路图画成为图1(b)的拓扑图。 我们称图1(b)为图(a)所示电路的图,图中的各线段称为支路,线段的连接点称为节点。因此,...
C语言实现拓扑排序 数据结构 C语言实现拓扑排序 数据结构