【发布时间】:2010-10-21 21:42:12
【问题描述】:
我有一个已排序的比率列表,我需要找到一个足够小的“bin 大小”,以免它们重叠。简而言之,我需要按照标题所说的去做。如果您想了解一些背景知识,请继续阅读。
我正在进行一个图形实验,该实验处理比率以及眼睛快速区分这些比率的能力。因此,当我们形成这些实验时,我们使用从点箱中选择的具有不同比率的点闪烁。一个 bin 只是一系列可能的比率,其中提到的数组元素位于中心。所有点箱的大小必须相同。这意味着我们需要在数组中找到彼此最近的元素。请记住,数组已排序。
谁能想到一个快速酷的方法来做到这一点?我从来没有特别倾向于算法,所以现在我只是向后遍历数组并从当前元素中减去下一个元素并检查它与总和。谢谢
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.
}
【问题讨论】:
-
a 和 b 之间不是几何平均值
sqrt(a*b)?