带有 float 的Java插值搜索

标签 java algorithm search

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

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+".");
    }
}

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

最佳答案

第二个答案的类型转换正确。

 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.

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

关于带有 float 的Java插值搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44466002/

相关文章:

java - 如何从网络服务器下载图像到java SE应用程序

algorithm - Web 表单的 Winkler 算法使用

mysql - 如何检查mysql表中多列的重复项

PHP 高级搜索错误

java - Android Studio单元测试: Issues in writing mock tests for volley request (finished with non-zero exit value 1)

java - JBoss 上的 JBPM 安装抛出 NoClassDefFoundError : org/apache/log4j/Category

java - 如何检查数据库事务中的数据?

python - 查找两个字符串之间的公共(public)子字符串

c - 'constant database' 的快速索引格式

java - 通过将数组切成两半来查找元素的搜索方法 (Java)