改变java代码以在节点之间找到平衡点

yhxst69z  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(260)
private void balancedNodes(Graph G) {
    int d; 
    int d2;
    int balance = 0;  
    int maxbalance = 0; 
    int count = 0;
    for(int v = 0; v < G.V(); v++) {
        d = degree(G, v); 
        for(int w : G.adj(v)) {
            d2 = degree(G,w); 
            balance = Math.abs(d2-d); 
            if(maxbalance < balance) 
                maxbalance = balance;
            balance = 0; //reset to 0
        }
    }
maxBalanceFactor = maxbalance;
for(int v = 0; v < G.V(); v++) {
    d = degree(G, v);
    for(int w : G.adj(v)) {
        d2 = degree(G,w); 
        balance = Math.abs(d2-d);
        if(maxbalance == balance) 
            count++;
        balance = 0; //rest to 0
    }
}
numberOfMostUnbalancedFriendships = count/2;

}
此当前代码确定两个顶点的“友谊”,意思是两个节点的普及率之间的差异。如果两个顶点具有相同的普及率,则平衡将为0。
我想修改我写的输出“几乎平衡”的代码。我想确定顶点u和顶点v的友谊是否“几乎”平衡,即u的朋友数和v的朋友数之差是否为1。这是唯一的修改。所以,在一张图中,我想找出图中有多少“几乎”平衡的友谊。我需要做什么改动?

km0tfn4u

km0tfn4u1#

我想通过这些评论我明白你想要什么。下面是一个计算所有“几乎平衡”节点的函数:

private int computeNumberOfAlmostBalancedNodes(Graph G) {
    int count = 0;
    for (int v = 0; v < G.V(); v++) {
        int d = degree(G, v);
        for (int w : G.adj(v)) {
            int d2 = degree(G, w);
            int balance = Math.abs(d2 - d);
            // Count this node pair if it is "almost balanced"
            if (balance == 1)
                count++;
        }
    }
    // Each pair of nodes will be counted twice, so divide by 2
    return count / 2;
}

如果要计算所有平衡节点,只需更改:

if (balance == 1)

收件人:

if (balance == 0)

请注意,我无法运行此代码来检查是否存在简单的打字错误,因为它引用了许多我没有定义的类型。
还要注意我为改进代码结构所做的一些事情。我去掉了一些不必要的行,并且移动了许多行的定义 int 变量到它们被使用的地方。当您尽可能靠近使用变量的位置定义变量时,代码更具可读性。

相关问题