找到一棵树的最大独立集

问题描述

有人可以用这个算法帮助我吗?我知道如何找到树的独立集的实际最大和:

    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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...