Algorithm 图的临界点:以最小点数和权重到达所有节点

Algorithm 图的临界点:以最小点数和权重到达所有节点,algorithm,data-structures,graph,Algorithm,Data Structures,Graph,这是数据结构和算法课程的一个问题,所以我不是在寻找一个具体或完整的答案,但希望能有一些提示来帮助我了解我是否在正确的轨道上(或者那些可以让我走上正确轨道的建议) 给定一个无向位置图,其中节点是位置,道路是边缘(按穿过某条道路所需的时间加权),找出可以到达所有节点的最小点数*,最大权重为5。 *点是图上的任意点。它们可以位于边或节点上。从现在起,我称之为临界点 例如,如果我们有这个图: 节点1->节点3(权重1)->节点2(权重7) 节点2->节点1(权重7)->节点4(宽1)->节点7(宽8)

这是数据结构和算法课程的一个问题,所以我不是在寻找一个具体或完整的答案,但希望能有一些提示来帮助我了解我是否在正确的轨道上(或者那些可以让我走上正确轨道的建议)

给定一个无向位置图,其中节点是位置,道路是边缘(按穿过某条道路所需的时间加权),找出可以到达所有节点的最小点数*,最大权重为5。 *点是图上的任意点。它们可以位于边或节点上。从现在起,我称之为临界点

例如,如果我们有这个图:

节点1->节点3(权重1)->节点2(权重7)

节点2->节点1(权重7)->节点4(宽1)->节点7(宽8)

节点3->节点1(1)->节点4(2)->节点5(2)->节点6(2)

节点4->节点2(1)->节点3(2)->节点5(2)

节点5->节点3(2)->节点4(2)->节点7(3)

节点6->节点3(2)->节点7(5)

节点7->节点6(5)->节点5(3)->节点2(8)

然后临界点将是:一个位于节点1和2之间的边缘,节点1的权重为2,节点2的权重为5(注意它们的总和必须仍然等于7,节点1到2的原始权重),第二个位于节点7本身。 第一个临界点可以达到节点1到6,最大重量为5。从该点开始,只有节点7在权重5中无法到达,因此第二个临界点位于节点7本身。因此,在权重为5(或更小)的情况下,可以从这两个临界点获得整个图

我的想法是:为每个鼻子保留一个布尔值“done”,表示从已经找到的某个临界点可以或不能到达它。 从某个节点开始。使用BFS并遍历图形。在未完成的节点上,执行以下操作:

检查节点的邻接列表。忽略权重大于10的边,因为无法放置到达所处节点以及这些边指向的节点的临界点。忽略指向“完成”节点的边。如果没有留下任何边,请将与当前节点位置相同的临界点添加到临界点列表中。否则,请检查剩余的最大权重边,并在此边上创建临界点:临界点有2个选项。从当前节点到关键节点的权重=5,从关键节点到相邻节点(边缘指向的节点)的权重为EdgeWight-5,或者:从当前节点到相邻节点的权重为5,从当前节点到关键节点的权重为EdgeWight-5。尝试这两种方法并检查哪个临界点可以到达权重5中的更多节点。使用具有多个可访问节点的节点,并将这些节点标记为已完成

这里的问题是有效性的证明。每个临界点(使用最大权重边时)有两个以上的选项,我只考虑两个。但另一方面,如果我考虑更多的复杂性问题,算法已经不是太优化。此外,我们可能需要在节点周围的边上放置多个临界点。该算法只放置一个或一个,然后继续,因为我假设放置多个点可能会放置比需要多得多的点

所以基本上,我不太确定从这里走到哪里。任何帮助都将不胜感激。

下面是我的心声,欢迎你在推理中找出漏洞

看起来你手头有封面问题。例如,给定集合覆盖问题的一个实例,可以构建您的问题的一个实例,这样解决后一个问题也会解决前一个问题。当然,集合覆盖问题是NP完全问题

这是降价单。给定一个泛集U及其子集的一些集合S覆盖所有U,构建一个仍然覆盖所有U的S的最小子集

我们构建了一个图G,如下所示。u中的每个元素u都是一个红色顶点。s的每个元素s是一个蓝色顶点。如果u \在s中,我们用长度为5的边连接相应的顶点。如果s的两个元素s_i和s_j相交,则我们用长度为5的边连接相应的顶点。没有其他的边缘


假设我们已经确定了G中的一组临界点Q。如果Q中有任何非蓝色点,则将其移除并替换为最近的蓝色顶点(如果有多个,则替换其中任何一个)。可到达顶点集不会变小。所以对于任何极小临界集,我们都可以建立一个只蓝的极小临界集,而只蓝的临界集正是U的覆盖集。

当你说“可以到达所有边”时,你的意思是每条边上的每个点都必须在临界点的5以内吗?或者只是每个节点(即边的端点)必须在临界点的5范围内?例如,如果图形只是一条长度为20的单条边,那么前者需要3个临界点,而后者只需要2个。对不起,我的错。我指的是每个节点,不是每个边。在你们的例子中只有2,我们能假设所有的边权重都是整数吗?如果是这样的话,那么必须有一个最小点解,所有临界点都出现在沿边的整数距离上,这将允许使用更简单的算法,因为可能的临界点位置集是有限的,因此我们可以很容易地枚举所有的可能性(尽管这将导致求解时间是图形总权重的函数)另一个想法是:给定一个边沿,就不足以尝试在你所考虑的边上的两个临界点放置。考虑下面的图,边长度等于连字符数:<代码> A -B-C--D <代码>。。每个距离为3。这是一个递归解决方案的框架,可以保证找到最佳值,假设整数距离:1.选择任何未“完成”的节点v。2.尝试在每个有距离的整数点添加一个临界点。恐怕我不太了解一些事情。什么是