Java 如何定义算法中的基本运算?

Java 如何定义算法中的基本运算?,java,time-complexity,complexity-theory,asymptotic-complexity,elementary-functions,Java,Time Complexity,Complexity Theory,Asymptotic Complexity,Elementary Functions,我一直认为算法的基本运算是位于最内部循环中的运算。我在书籍和在线文章中发现了很少的细节,可能是因为它被认为是一些琐碎的东西,但是很少有人关心解释什么应该是算法中的基本操作,他们总是说它是执行得最多的操作,也就是说,位于最内部循环中的操作 因此,在该算法中: public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); wh

我一直认为算法的基本运算是位于最内部循环中的运算。我在书籍和在线文章中发现了很少的细节,可能是因为它被认为是一些琐碎的东西,但是很少有人关心解释什么应该是算法中的基本操作,他们总是说它是执行得最多的操作,也就是说,位于最内部循环中的操作

因此,在该算法中:

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);
        }
    }
}
公共类主{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
while(true){
int N=in.nextInt();
如果(N==0)
打破
长期成本=0;
int[]房屋=新的int[N];
对于(int i=0;i
我说过基本操作是赋值操作
house[I]=in.nextInt()在第一个for中,因为它运行N次,而第二个for运行N-1次

我的老师说这是不正确的,这个算法中的基本运算是秒数内的运算


任何情况下,都有例外情况,其中基本操作不是位于最内部循环内的操作,或者她错了?

对于此程序,第二个For循环不在第一个For循环内

该程序将N个数字作为houses数组和 实际的算法只在第二个for循环中,它保持 第i个索引中数组的前i项的运行成本计数


您的老师是正确的。

基本操作是指其执行时间受特定机器和编程语言的常数限制的操作。这意味着,如果我们在一台特定的机器上运行一个用特定语言编写的基本操作,它总是需要相同的时间来执行。例如赋值、加法、乘法等。
在您的情况下,.nextInt()中的操作;在第一个循环下实际上是一个键盘输入事件,一种IO操作,主要取决于用户。但它不是一个基本的操作。< /P>但是如果我们把循环内的指令看作是O(1)的成本,它就如同在第一次执行第一次操作时的O(1),而在第二次运算中,每次执行时,O(2)的代价都在一起。但是for循环的成本是O(n),如果O(1)和O(2)是不相关的,如果与O(n)相比,我认为我们不应该考虑循环内的代码,只考虑循环本身的代价…这样做,因为第一个for的运行次数比第二个for的运行次数多,我认为这应该被视为基本操作。@Brendan,不清楚为什么基本操作应该在第二个for循环中。你能详细说明一下吗?