如何定义算法中的基本操作是什么?

时间:2016-02-15 23:57:20

标签: java time-complexity complexity-theory asymptotic-complexity elementary-functions

我一直认为算法的基本操作是位于最内循环内的操作。我在书籍和在线文章中发现这方面的细节很少,也许是因为它应该是微不足道的,但是很少有人想解释什么应该是算法中的基本操作,他们总是说它执行的操作最多的,也就是位于最内圈的内部。

因此,在这个算法中:

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

        while (true) {
            int N = in.nextInt();
            if (N == 0)
                break;

            long cost = 0;
            int[] houses = new int[N];
            for (int i = 0; i < N; ++i)
                houses[i] = in.nextInt();

            for (int i = 0; i < N - 1; ++i) {
                cost += Math.abs(houses[i]);
                houses[i + 1] += houses[i];
            }
            System.out.println(cost);
        }
    }
}

我说基本操作是第一个中的赋值操作houses[i] = in.nextInt();,因为它运行N次,而第二次运行N-1次。

我的老师说这是不正确的,并且此算法中的基本操作是第二次操作。

有任何机会,有一些例外,其中基本操作不是位于最内循环内的操作,或者她错了?

2 个答案:

答案 0 :(得分:0)

对于这个程序,第二个for循环不在第一个for循环中。

该程序将N个数字作为房屋阵列和房屋数据的输入 实际算法只在第二个for循环中,它保持着 运行第i个索引中数组的第一个i项的成本计数。

你的老师是对的。

答案 1 :(得分:0)

基本操作是指其执行时间受特定机器和编程语言的常量限制的操作。这意味着,如果我们在特定计算机上运行以特定语言编写的基本操作,则执行时间总是相同的。例如赋值,加法,乘法等。 在您的情况下,操作in.nextInt();在第一个循环下,实际上是键盘输入事件,一种IO操作,主要取决于用户。因此,这不是基本操作。