Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取排序列表中相邻数组元素之间的最小差异_Java_Arrays_Algorithm - Fatal编程技术网

Java 获取排序列表中相邻数组元素之间的最小差异

Java 获取排序列表中相邻数组元素之间的最小差异,java,arrays,algorithm,Java,Arrays,Algorithm,我有一个分类的比率列表,我需要找到一个足够小的“箱子大小”,这样它们就不会重叠。简而言之,我需要按照标题所说的去做。如果你想了解一些背景知识,请继续阅读 我正在做一个图形实验,研究比率和眼睛快速区分这些比率的能力。所以,当我们进行这些实验时,我们使用从点仓中选择的不同比率的点的闪光。一个箱子只是一系列可能的比率,上面提到的数组元素位于中间。所有的点仓大小必须相同。这意味着我们需要在数组中找到彼此最近的元素。请记住,数组已排序 有人能想出一个快速而酷的方法来做这件事吗?我从来没有特别倾向于算法,所

我有一个分类的比率列表,我需要找到一个足够小的“箱子大小”,这样它们就不会重叠。简而言之,我需要按照标题所说的去做。如果你想了解一些背景知识,请继续阅读

我正在做一个图形实验,研究比率和眼睛快速区分这些比率的能力。所以,当我们进行这些实验时,我们使用从点仓中选择的不同比率的点的闪光。一个箱子只是一系列可能的比率,上面提到的数组元素位于中间。所有的点仓大小必须相同。这意味着我们需要在数组中找到彼此最近的元素。请记住,数组已排序

有人能想出一个快速而酷的方法来做这件事吗?我从来没有特别倾向于算法,所以现在我只是向后运行数组,从当前元素中减去下一个元素,然后根据总和检查。谢谢

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.
    }

唯一的变化是:将数组搜索转向递增方向——许多架构更倾向于正向搜索。(有些人没有)还没有验证我没有引入一个off-by-one错误。(对不起。)

专用双FindNumerostyBinRangeContent(双[]比率){ int minI=0; 双最小值=双最大值;
对于(int i=0;i前移函数,修复了您遇到的一些逻辑问题。由于您正在寻找最小双精度,您的初始比较变量应该从最大值开始。通过减法删除比较,因为您以后没有使用它,将其替换为除法。 注:未测试边缘情况,包括零和负片

private double findNumerostyBinRangeConstant(double[] ratios) {
    double result = Double.MAX_VALUE;
    for (int i = 0; i<ratios.length-1; i++) {
        if (ratios[i+1]/ratios[i] < result){
            result = ratios[i+1]/ratios[i];
        }
    }
    return Math.sqrt(result);
}
private双findNumerostyBinRangeConstant(双[]比率){
双重结果=双重最大值;

对于(inti=0;iIsn不是a和b之间的几何平均值
sqrt(a*b)
?@kaskogu:搜索最小比率并不等于搜索最小差异。规范要求最小差异。但是,从Double.MAX_值开始最小/结果是一个聪明的主意。
private double findNumerostyBinRangeConstant(double[] ratios) {
    double result = Double.MAX_VALUE;
    for (int i = 0; i<ratios.length-1; i++) {
        if (ratios[i+1]/ratios[i] < result){
            result = ratios[i+1]/ratios[i];
        }
    }
    return Math.sqrt(result);
}