0

我一直认为算法的基本操作是位于最内层循环内的操作。我在书籍和在线文章中发现的细节很少,可能是因为它应该是微不足道的,但少数愿意解释算法中的基本操作应该是什么,他们总是说它是执行的操作most,即位于最内循环内的那个。

因此,在这个算法中:

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();第一个for里面的赋值操作,因为它运行了N次,而第二个for运行了N-1次。

我的老师说这是不正确的,这个算法中的基本操作是秒内的操作。

无论如何,有一些例外情况,即基本操作不是位于最内循环内的操作,或者她错了?

4

2 回答 2

0

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

于 2020-05-20T19:51:46.030 回答
0

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

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

你的老师是对的。

于 2016-02-18T20:03:30.757 回答