По сути, вам нужно найти x
так, чтобы было выполнено
, где t
- общее время, а n
- количество разделений .
Сумма может быть переформулирована как 2^(1-n)*(2^n - 1)
, поэтому для x
вы получите
x
, тогда это значение будет для вас первым. item, а второй элемент получит x/2
, а третий - x/(2^2)
и т. д.
Зная это, вы можете написать метод split
следующим образом:
private static double[] split(double t, int n) {
double power2_1 = Math.pow(2.0, n - 1);
double power2 = Math.pow(2.0, n);
double factor = (t * power2_1) / (power2 - 1);
double[] res = new double[n];
for (int i = 0; i < n; i++) {
res[i] = factor;
factor /= 2;
}
return res;
}