【问题标题】:Sorting Algorithm Explanation Complexity and Type排序算法解释复杂性和类型
【发布时间】:2021-08-22 19:41:15
【问题描述】:

这是 Java 中的一种排序算法。我必须分析这个算法,但我对这个主题真的很陌生,不确定每一行的作用。我知道它具有O(N²) 的复杂性,但我不明白它是什么类型。
有人可以解释一下someAlgorithm()的方法吗?

这是代码:

import java.util.Arrays;

public class SomeClass {
    public static void main(String[ ] args) {
        int[] data = {12, 14, 13, 15, 19, 17, 16, 11, 18, 20};
        System.out.println("Compute some result for the Array : " + Arrays.toString(data));
        int[] result = someAlgorithm(data);
        System.out.println("Resulting Array: " + Arrays.toString(result));
    }
 
    private static int[] someAlgorithm(int[] data) {
        int size = data.length;
        int[] result = new int[size];
        for (int i = 0; i < size; i++) {
            int total = 0;
            for (int j = 0; j <= i; j++) {
                total += data[j];
            }
            int average = total / (i + 1);
            result[i] = average;
            System.out.println("Average for iteration " +  i + " is: " + average);
        }
        return result;
    }
}

【问题讨论】:

  • 您是否尝试运行此代码?该算法与排序无关。它只是将输入数组12+14 的两个第一个元素相加,然后将其除以索引(它应该计算平均值,但绝对不是平均值)。该算法的复杂度为 O(N)。
  • @Alex 我想说你错了。内部循环运行 1+2+3 -> O(N^2) 次。而且它确实是平均值,result[i] 存储了第一个 i 元素的平均值。
  • @KabirKanhaArora,我对复杂性的评论引用了原始代码,正如您在编辑历史记录中看到的那样,其中嵌套循环使用了一个常量值。
  • 这不是排序算法,您可能需要先运行它

标签: java arrays algorithm


【解决方案1】:

someAlgorithm() 方法的要点在于,它将数组data 作为输入,并创建另一个相同大小的数组result,其中result[i] 存储数组的平均值(作为int)输入数组的第一个 i 元素。

请注意,您可以保留到目前为止看到的元素的运行总和,并且 相当容易地将此​​算法的复杂度降低到O(N)

另外,正如 @Alex 在 cmets 中提到的,这确实与排序无关,并且不是一种排序算法。

【讨论】:

    【解决方案2】:

    algorithmic complexity有两种类型:

    1. Space Complexity
    2. Time Complexity

    正如你所说,这个算法在O(N²) 中运行,这是关于时间复杂度。这是因为算法的运行时间随着size 变量的平方而增加。至于空间复杂度,它运行在O(N),因为它占用的空间(即内存量)随着size变量线性增加。

    要查看算法运行的时间复杂度,您需要查看有多少嵌套循环,以及它们运行多长时间,具体取决于输入。

    要查看算法运行的空间复杂度,您需要查看数据存储的时间和位置,以及根据输入存储的数据量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多