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

how to do a weighted division on a set of nodes based on a their number

我有很多节点,例如 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;
}

我找到了获取 parent 个节点数的方法

如果数字的小数部分等于 0 那么我们不加 1 parent 示例:sqrt(9) = 3.0

parents = 3 个节点,每个 parent = 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;    
    }

节点数parent节点

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 个节点 parent 使用循环

示例:节点数 = 14

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

在这种情况下 parent 的数量是 3+1 = 4

每个 parent 的节点数为 14 - 4 = 10 10/4 = 2

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

2 parents 将有 3 child 个节点 其他人将有 2