У меня есть отсортированный список соотношений, и мне нужно найти «размер корзины», который достаточно мал, чтобы ни один из них не перекрывался.Короче говоря, мне нужно сделать то, что говорит название.Если вам нужен небольшой фон, читайте дальше.
Я работаю над графическим экспериментом, который касается соотношений и способности глаза быстро различать эти соотношения.Поэтому, когда мы формируем эти эксперименты, мы используем вспышки точек с различными соотношениями, выбранными из наборов точек.Бин - это просто диапазон возможных соотношений с упомянутыми элементами массива в центре.Все точки должны быть одинакового размера.Это означает, что нам нужно найти элементы в массиве, которые являются ближайшими друг к другу.Имейте в виду, что массив отсортирован.
Кто-нибудь может придумать быстрый крутой способ сделать это?Я никогда не был особенно склонен к алгоритму, поэтому сейчас я просто пробегаю массив в обратном направлении, вычитая следующий элемент из текущего и проверяя его на сумму.Спасибо
private double findNumerostyBinRangeConstant(double[] ratios) {
int minI = 0;
double min = 0;
for (int i = ratios.length -1; i > 0; i--) {
if (ratios[i] - ratios[i-1] > min) {
min = ratios[i] - ratios[i-1];
minI = i;
}
}
return Math.sqrt(ratios[minI]/ratios[minI - 1]); //Essentiall a geometric mean. Doesn't really matter.
}