【问题标题】:Java interpolation search with floating numbers带有浮点数的 Java 插值搜索
【发布时间】:2017-06-09 20:12:17
【问题描述】:

我目前正在尝试使用浮点数实现插值搜索,这是我的代码:

import java.util.Arrays;

class InterpolationSearch   {
    private static float comparisions = 0;
    public static int interpolationsearch (double arr[], double x, int high, int low)   {
    while ( low<=high)  {
        comparisions++;
        int i = low + (x-arr[low])*(high-low)/(arr[high]-arr[low]);
        if (x==arr[i])
            return i;
        else if (x<arr[i])   
            high = i-1;
        else
            low = i+1;
        }
        return -1;
    }   
    public static void main(String args[])  {
        int n=100;
        double array[] = new double[n];
        for (int i=0; i<100; i++)   {
            for (int k=0; k<n; k++) {
                double r = Math.random();
                r = r * 100;
                r = Math.round(r);
                r = r / 100;
                array[k] = r;
            }
            Arrays.sort(array);
            double search = Math.random();
            search = search*100;
            search = Math.round(search);
            search = search/100;
            int result=interpolationsearch(array, search, n-1, 0);
            if (result == -1)
                System.out.println(search +" befindet sich nicht im Array.");
            else
                System.out.println(search+" befindet sich im Array an der Stelle "+(result)+".");
        }
        System.out.println("Anzahl der gemittelten Vergleiche: "+comparisions/100+".");
    }
}

首先我的算法是否正确?其次,我如何使用浮点数?在当前代码中,我在第 8 行收到以下错误:类型不匹配:无法从 double 转换为 int。我已经尝试将所有内容都转换为 int,但它不起作用。

【问题讨论】:

    标签: java algorithm search


    【解决方案1】:

    第二个答案是正确的类型。

     int i = (int)(low + (x-arr[low])*(high-low)/(arr[high]-arr[low]));
    

    现在你的程序给出以下输出

    0.47 befindet sich im Array an der Stelle 41.
    0.33 befindet sich im Array an der Stelle 32.
    1.0 befindet sich im Array an der Stelle 99.
    0.52 befindet sich im Array an der Stelle 54.
    0.51 befindet sich im Array an der Stelle 48.
    0.32 befindet sich im Array an der Stelle 25.
    

    现在您必须详细说明您想要实现的目标。这是正确的输出吗?

    【讨论】:

    • 这正是我所做的,但它根本不起作用。它适用于 2 个循环,然后程序无缘无故停止工作,所以这不应该是最好的解决方案,即使它理论上应该工作......问题是为什么它对你有用,但对我不起作用?输出似乎是正确的,是的。
    【解决方案2】:
    1. 我的算法正确吗?

    您是可以验证算法的人。正在工作...

    1. 我已经尝试将所有内容都转换为 int,但它不起作用

    有效!您只需要转换整个操作的结果即可将 double 转换为 int 但请记住您将丢失小数部分..

    示例:

    int i = (int) (low + (x - arr[low]) * (high - low) / (arr[high] - arr[low]));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多