NPC,拓扑排序,图论

apple蒂疤 2018-11-04 12:40:30
问题背景:给定一个有向无环图(DAG)以及这个有向无环图的某个拓扑排序序列,现在添加一个点和与这个点有关的边(指向此点或者从此点指向已有点都是有可能的,而且可能同时存在好多条边),但是!!可以保证添加这个点以后的DAG图还是一个有向无环图,如果想要将后来添加的这个点加入到这个序列中,同时使得这个序列成为这个添加点以后的DAG图的拓扑排序序列,求问如何移动已有的点,使得需要的移动次数最少?(自我认为是NPC。。。。。)

举例:例如某个DAG图中有四个点a,b,c,d.并且有两条边a指向b,c指向d,符号描述为{V,E}={ (a->b), (c->d) }。给定的拓扑排序序列为[a,b,c,d]。

例子一:现在添加一个点e,和一条边(e->d),
那么此时只需将d后移一个位置,e插入到原来d的位置即可满足题目要求,即后来的序列为【a,b,c,e,d】,则只需一个移动即可。要注意的是,这时候像【a,b,e,c,d】也是满足要求的序列,但是可以看出此时需要移动两次。

例子二:再如,若新加点e和新加边为(e->c)和(e->d),则仅需将b移动到原序列最后,e插入到b的位置即可,也就是需要一次移动即可
...全文
76 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
apple蒂疤 2018-11-04
  • 打赏
  • 举报
回复
题主自我认为: 每一个拓扑排序序列都有可能成为潜在的可能答案,所以需要逐个验证,而求解所有拓扑排序序列的数目都是一个已证明的NP难,多以认为是一个NPC问题

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧