在线性时间内找到 k-着色k = 2/3图

如何解决在线性时间内找到 k-着色k = 2/3图

问题:

给定一个图 G = (V,E) G 的 k 着色是顶点的标签,颜色为 c_1,c_2,...,c_k 使得对于每条边 (u,v) 的颜色u 与 v 的颜色不同。

A.给出一个线性时间算法,为一棵树找到一个 2-coloring。

B.考虑用两种颜色为树着色,以便获得最大数量的 c_1 节点。证明您的 (a) 部分中的算法(可能稍作修改)可用于解决此问题。准确点。

C.显示一个树 T 的示例,它最多可以有 j 个节点在 2 着色中着色为 c_1,但 T 可以在 3 着色中具有 j' > j 个着色为 c_1 的节点。尝试找出这种树 T 的最小例子。

D.给出一个线性时间动态规划算法,该算法为树创建 3 着色,使得最大节点数为 c_1。证明你的回答是正确的。

我有什么:

A 和 B 部分看起来很简单,但我在 C 和 D 上挣扎

A.这看起来很简单,运行DFS,但是如果它就修改

  1. 遇到一个未着色的节点颜色它 c1 和它的子节点 c2,

  2. 遇到一个有颜色的节点,它的子节点颜色相反

  3. 如果它曾经试图“翻转”一个孩子的颜色,然后返回它不可能有 k 着色

这只是 DFS,所以将运行在 O(V+E)

编辑:由于这是一棵树,您可以在随机节点上调用 BFS,在 BFS 中交替颜色

B.由于这是一个二元第一选择(即 c1 或 c2)并且所有选择都遵循第一选择,我们可以简单地计算哪个更优着色第一个节点 c1 或 c2。我们可以通过在上述算法中添加一个计数器来计算 c1 节点的数量。从c1开始运行算法两次,然后从c2开始,比较两者之间c1节点的数量,然后选择c1节点较多的图

C.摆弄了一段时间,找不到一个,更不用说最小的了

编辑:王冰作品描述的1-3、2-3、3-4、4-5、4-6

D.不知道。我假设您将不得不使用修改后的 DFS 让它以线性方式运行,但除此之外我非常不确定。我可以想出蛮力的方法,但没有什么是线性运行的。

编辑:仍然对此感到困惑

解决方法

c:1-3、2-3、3-4、4-5,4-6。这棵树可以有 3 个双色的每个颜色的节点。但是,如果将节点 #3/#4 着色为其他两种颜色(三色),则可以有 4 个相同颜色的节点。通过检查所有可能性,您应该很容易证明没有更小的答案。

D:只需遍历树,例如DFS。每个节点需要保留所有 3 种颜色的 c_1 计数。当您处理第一个节点时,这将是 (1,0) - 相当容易计数。将节点添加到访问中后,尝试所有 3 种颜色,每种颜色将与连接节点的 2 种颜色兼容,从中选择较大的一种,以此类推,以构建当前节点的 3 个值。

E=[(1,3),(2,(3,4),(4,5),6)]
V={v:set() for e in E for v in e}
[None if V[e[0]].add(e[1]) else V[e[1]].add(e[0]) for e in E]
serialized={}
def traverse(c):
    serialized[c]=V[c]
    [traverse(n) for n in V[c] if n not in serialized]
    
traverse(E[0][0])
visited=set()
for k,v in reversed(serialized.items()):
    filtered=v.intersection(visited)
    visited.add(k)
    m=[1+sum(max([V[child][1],V[child][2]]) for child in filtered),sum(max([V[child][0],V[child][1]]) for child in filtered)]
    V[k]=m
print(max(V[k]))
,

A.选择任何顶点并给它上色 c1。从那里运行 BFS。奇数距离处的所有东西都得到 c2,偶数距离处的所有东西都得到 c1。

B.只有两种颜色,它们的区别仅在于将 c1 替换为 c2。如果需要,运行 (A) 并交换。

C.想象一下 A 和 B 是相连的,a 有许多其他邻居,它们都是叶子,B 也是如此。 使用 2 种颜色,您可以获得比 A 或 B 大的一种给定颜色,但使用三种颜色您可以得到两种A 和 B 不同的颜色,并将所有的叶子涂成相同的颜色。叶子的数量取决于 j 和 j' 输入。如果我们要找到 j 和 j' 的最小值,则给出每两片叶子。然后你可以有四个 c1 叶子,A c2 和 B c3,而不是最多只有 3 个只有两种颜色。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?