如何解决找到一棵树的最大独立集
有人可以用这个算法帮助我吗?我知道如何找到树的独立集的实际最大和:
int[] picked = new int[t.noOfVertices];
int[] notPicked = new int[t.noOfVertices];
for (int i = 0; i < t.noOfVertices; i++) {
int node = postOrder[i];
int parent = parIds[node];
if (t.edges[node].length == 1 && parent >= 0) {
picked[node] = weights[node];
notPicked[node] = 0;
}
else{
picked[node] = weights[node];
for (int j = 0; j < t.edges[node].length; j++) {
int neighbor = t.edges[node][j];
if (neighbor == parent) continue;
picked[node] += notPicked[neighbor];
notPicked[node] += Math.max(picked[neighbor],notPicked[neighbor]);
}
}
}
“ t”是一个树对象,其中包含用于树的前后遍历的数组。我现在需要做的是找到集合中包含的实际节点,如果有多个最大独立集合,则返回最大的集合。一般策略是为每个节点计算最佳解决方案中包含的子代数,以了解何时选择节点以及何时不选择节点。然后,按后顺序遍历树,如果pick [node]> notPicked [node],则将一个节点添加到集合中。如果picked [node] == notPicked [node],则根据前面讨论的计算,选择解决方案中有更多节点的路径。我不确定如何执行此计算。谁能帮忙这个算法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。