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