【问题标题】:Compute time to find an element (number) in an array using linear Search使用线性搜索计算在数组中查找元素(数字)的时间
【发布时间】:2021-11-02 17:21:48
【问题描述】:

所以我在作业中遇到了这个问题,除了最后一部分,我几乎都做了,代码运行良好。我得到的问题在下面提到。

编写一个程序,生成 0 到 100 之间任意数量的随机整数 范围。您的程序应该获取大小作为参数并返回 数字作为数组。

现在实现线性搜索。将 100 个项目的随机数组传递为 列表和“50”作为要查找的项目。计算找到 50 的时间 数组并记录消耗的时间。

进行此测试 10 次

我想知道如何将数组运行 10 次并计算每个循环分别找到 50 次的时间。

我在下面提到了我的代码。我的代码工作得很好,需要知道如何做最后一部分。

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Array size:\t");
        int n = sc.nextInt();
        System.out.println("Element to be found: ");
        int x = sc.nextInt();

        ArrayList list = GenerateRandomIntegers(n, 0, n);

        //printing the array
        StringBuffer sb = new StringBuffer();
        for (Object s : list) {
            sb.append(s);
            sb.append(" ");
        }
        String str = sb.toString();
        System.out.println(str);

        //start computing time
        long startTime = System.nanoTime();

        linearSearch(list, x);

        //end computing time
        long endTime = System.nanoTime();
        long timeElapsed = endTime - startTime;
        System.out.println("Execution time in nanoseconds: " + timeElapsed);
        System.out.println("Execution time in milliseconds: " + timeElapsed / 1000000);
    }


    public static ArrayList GenerateRandomIntegers(int size, int min, int max) {
        ArrayList numbers = new ArrayList();
        Random rand = new Random();

        while (numbers.size() < size) {
            //getting random numbers within range
            int randomNumber = rand.nextInt((max - min) + 1) + min;
            //check for duplicates
            if (!numbers.contains(randomNumber)) {
                numbers.add(randomNumber);
            }
        }
        return numbers;
    }

    public static void linearSearch(ArrayList arr, int target) {
        for(int i=0;i<arr.size();i++) {
            if(arr.get(i).equals(target)) {
                System.out.println("Item found at = "+(i+1));
            }
        }
    }
}

这是输出;

我希望你能解决我的问题 (T^T)。只想知道如何一次运行 10 次(如循环)并为每个循环分别计算时间。

【问题讨论】:

    标签: java algorithm sorting linear-search


    【解决方案1】:

    这有点模棱两可,因为它可能要求简单地运行程序 10 次;然而,更有可能的是程序运行一次并执行 10 次搜索。每次都生成数组也是有道理的。

    你可以把整个事情放在一个循环中......

    for(int i = 0; i < 10; i++)
    {
        // generate array
        // startTime
        // search
        // endTime
        // output results
    }
    

    【讨论】:

    • 我试过这样做,但是当我这样做时,时间并没有计算。它只计算第一个数组,其他数组显示为 0。:(
    • 只是毫秒显示为 0 吗?对我来说,每次运行的时间小于 1000000 ns,因此除以 1000000 将进行整数除法,结果为 0。如果除以 1000000.0,您将获得毫秒的浮点输出。
    • 除了循环中生成的第一个数组外,我得到毫秒和纳秒为 0。
    • 你能发布你的循环代码吗?
    • 啊,成功了!!!正如你所说,毫秒显示为 0。非常感谢你的帮助:))
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多