Как рассчитать количество операций, которые происходят во время выполнения цикла for? - PullRequest
5 голосов
/ 09 февраля 2009

У меня был экзамен пару дней назад, и сегодня инструктор дал нам ключевой ответ на экзамене.

Один из вопросов был

for ( j = 9; j >= 1; j-- )

Количество операций

Результат был 20.

Может кто-нибудь объяснить, как он получает 20 операций от этого?

Ответы [ 4 ]

14 голосов
/ 09 февраля 2009

20 операций:

set j = 9
check if j(9) >= 1
set j to 8
check if j(8) >= 1
set j to 7
check if j(7) >= 1
set j to 6
check if j(6) >= 1
set j to 5
check if j(5) >= 1
set j to 4
check if j(4) >= 1
set j to 3
check if j(3) >= 1
set j to 2
check if j(2) >= 1
set j to 1
check if j(1)>=1
set j to 0
check if j(0)>=1

для (j = n; j> = 0; j--)

Хорошо, вы начинаете с двух операций:

  • (J = N)
  • check (j> = 0).

Для всех n <0 он останавливается там. </p>

Если n = 0, вы получаете дополнительное:

  • J -
  • check (j> = 0).

Для n = 1 вы получаете другой набор из них.

Таким образом, число операций равно 2 для n <0 и 2n + 4 для n> = 0.

Это не так сложно. Вам просто нужно думать как компьютер и внимательно отмечать любые изменения состояния (набор переменных).

3 голосов
/ 09 февраля 2009

Ну, в первой итерации, j устанавливается на 9. После этого каждая итерация в основном выполняет те же две инструкции:

  • сначала проверьте, j >= 1 и
  • секунда, уменьшение j (j--).

Это делается девять раз (от 9 включительно до 0 включительно). В самой последней итерации мы снова проверяем, является ли j >= 1, и, поскольку это ложно, мы выходим из цикла Поэтому мы получаем 1 + 9 * 2 + 1 = 20 итераций.

0 голосов
/ 09 февраля 2009

У вас есть 1 задание (j = 9). Операция "j--" будет выполнена 9 раз; условная проверка "j> = 1" будет выполнена 10 раз (каждая итерация, на которую вы задаете вопрос "is j> = 1"), последняя не пройдёт Итак, у вас есть 1 + 9 + 10 = 20.

Ваш инструктор очень, очень плох, если он настолько подлый, что не предлагает помочь. Это один из тех вопросов, которые вы получаете или не получаете. Инструктор должен помочь. :)

0 голосов
/ 09 февраля 2009

Какую ценность вы записали? Просто любопытно.

Давайте посчитаем их вместе, майя:

for (j = 9; j >= 1; j--)

один для присвоения 9 j = 1; одно сравнение текущего значения j с 1 для каждой итерации цикла = 10; одно уменьшение j для каждой итерации цикла, кроме последней = 9;

1 + 10 + 9 = 20 в моей книге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...