如何根据一组节点对一组节点进行加权除法

时间:2018-05-09 07:33:27

标签: java algorithm cluster-computing partitioning

我有多个节点,例如100个节点,我希望每个节点有10个父节点和9个节点。

此代码在开始时工作正常,但是当我们获得的节点多于44

时,它会缩放
    for (int i = 10; i < 100; i++) {
        System.out.println("i : "+i);
        int x = new Testing().getSubMastersNumber(i);
        System.out.println("sub-Masters number : "+x);
        int result = i/x-1;
        System.out.println(" remaining nodes:  "+ i % x +"\t number of node by SubMaster : "+result);
        System.out.println("");
    }

public int getSubMastersNumber(int num) {
    return (num>1)? 1+getSubMastersNumber(num/2):0;
}

1 个答案:

答案 0 :(得分:0)

我找到了一种如何获取父节点数的方法

如果数字的小数部分等于0,那么我们不添加1个父级 例如:sqrt(9)= 3.0

parents =每个父节点3个节点= 2,其余节点= 0

public static int getSM(int num) {
        return ((Math.sqrt(num)-(double)((int) (Math.sqrt(num))))==0) ? (int)Math.sqrt(num) : (int)Math.sqrt(num)+1;    
    }

父节点的节点数

public static int nodePerSM(int num) {
        return (int) ((num - getSM(num))/getSM(num));
    }

问题是总有一些剩余的节点

public static int remainingNodes(int num) {
        return (num - getSM(num))-(nodePerSM(num)*getSM(num));
    }

我们为每个父节点添加1个节点 使用循环

示例:节点数= 14

sqrt(14)= 3.74 ..... decimalPart(sqrt(14))= 0.74 ......

在这种情况下,父母的数量是3 + 1 = 4

每个父节点的节点是14 - 4 = 10 10/4 = 2

剩余节点数是(14-4) - (2 * 4)= 2

2个父母将有3个子节点 其他人将有2