Algorithm 图算法思想

Algorithm 图算法思想,algorithm,graph,Algorithm,Graph,大家好,有谁能给我们一个提示,关于这个问题的潜在图形问题是什么 我个人是这样想的: 通过减少边数对图的节点数进行排序。然后选择最上面的一个。之后,忽略此顶部节点连接到的所有节点。然后选择下一个 对于第一个测试用例 答案是1,因为图形是完全连接的,选择任何节点都将确保覆盖所有其他节点 对于第二个测试用例 我们可以选择节点5(这将包括节点1、2和4),然后我们可以选择节点3。这样可以覆盖所有节点 问题是这种方法在我看来只是虚构的。这不是任何图形算法 如果有人能给你一个提示就好了。谢谢 这是一个NP

大家好,有谁能给我们一个提示,关于这个问题的潜在图形问题是什么

我个人是这样想的:

通过减少边数对图的节点数进行排序。然后选择最上面的一个。之后,忽略此顶部节点连接到的所有节点。然后选择下一个

对于第一个测试用例

答案是1,因为图形是完全连接的,选择任何节点都将确保覆盖所有其他节点

对于第二个测试用例

我们可以选择节点5(这将包括节点1、2和4),然后我们可以选择节点3。这样可以覆盖所有节点

问题是这种方法在我看来只是虚构的。这不是任何图形算法

如果有人能给你一个提示就好了。谢谢

这是一个NP难问题,所以除非p=NP,否则就没有多项式解

注意n<20,所以幸运的是我们仍然可以足够快地解决它。对于每个用户0≤ i 让我们将f(i,m)定义为访问位掩码m表示的所有用户所需的最小用户数,只在具有索引的用户墙上发布≤ 我我们可以使用以下算法计算f:

f(i,m) = ∞  for all i, m
f(0, 0) = 0
f(0, b(0)) = 1
for i = 1 to n - 1:
    for m = 0 to 2^n - 1:
        f(i, m) = min(f(i, m), f(i - 1, m))
        f(i, m | b(i)) = min(f(i, m | b(i)), f(i - 1, m) + 1)    

答案是f(n-1,2^n-1)。运行时:O(n*2^n)

@VVV:因为n<20,位掩码的DP工作。这样想吧:每个用户都会接触到其他用户的子集,包括他自己。我们如何组合最少数量的子集以覆盖整个用户集。@elyashiv:因为n<20,所以很容易solve@elyashiv:哈?当然是NPC,这并不意味着我不能为它编写一个O(n*2^n)算法,在给定的约束条件下在一秒钟内解决它。另外,我认为你指的是NP难而不是NPC,因为这不是一个决策问题。@VVV,这并不是不可能的。有几次我们在top coder中遇到了NP完全问题(有一次甚至是500分),因为作者认为他得到了一个解决方案(比赛后证明是错误的)。另外,在我的一个地区,有一个NP完全问题的约束条件n@Ivaylo: “带约束的NP完全问题nThanks Niklas,维基百科上的描述与问题描述相符。事实上,我是一个图形新手,所以研究过bfs、dfs、生成树、最短路径等。所以我试图用其中一个来解决它,但结果完全不同。感谢您的详细解释,您是对的。n<20应该也让我想到NP完全图算法。谢谢。@VVV:从输入约束中,您通常可以大致看出问题解决者所期望的时间复杂性。20*2^20是20*10^6,这是一个典型的时间范围,加上一个低常数因子。谢谢Niklas。我得到了该程序的AC,我喜欢你在节点的邻居上应用OR操作的创新方法,以检查是否所有节点都可以访问。但我不可能想出这样的主意。您是如何想到将邻居存储为位而不是普通的邻接列表的?我的意思是我需要像这样的想法来解决这些问题。我从哪里可以学到这些技巧?我们只被教导将图形存储为邻接列表/矩阵。