Как определить, что является элементарной операцией в алгоритме?
Я всегда думал, что элементарной операцией из алгоритма была операция, расположенная внутри самого внутреннего цикла. Я нашел очень мало подробностей об этом в книгах и онлайн-статьях, возможно, потому что это должно было быть чем-то тривиальным, но те немногие, кто хотел объяснить, что должно быть элементарной операцией в алгоритме, всегда говорят, что это операция, которая выполняется самый, то есть тот, который находится внутри самой внутренней петли.
И как таковой, в этом алгоритме:
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 раз.
Мой учитель говорит, что это неверно и что элементарная операция в этом алгоритме - это операция внутри второй функции.
Вероятно, есть исключения, когда элементарная операция не является операцией, расположенной внутри самого внутреннего цикла, или она ошибочна?
1 ответ
Элементарная операция - это операция, время выполнения которой ограничено константой для конкретной машины и языка программирования. Это означает, что если мы запускаем элементарную операцию, написанную на определенном языке, на определенной машине, для ее выполнения всегда требуется одно и то же время. Например, присваивание, сложение, умножение и т. Д. В вашем случае операция in.nextInt(); под первым циклом на самом деле находится событие ввода с клавиатуры, вид операций ввода-вывода, которые в основном зависят от пользователей. Так что это не элементарная операция.
Для этой программы второй цикл for не находится внутри первого цикла for.
Эта программа принимает N чисел в качестве входных данных для массива домов, и фактический алгоритм находится только во втором цикле for, где он хранит текущий счет стоимости первых i элементов массива в i-м индексе.
Ваш учитель прав.