Количество итераций вложенных циклов

66
4

Извините, если я перепрошу предыдущий вопрос, но я не могу найти конкретный ответ на этот вопрос. Как я могу сделать формулу для вложенных итераций цикла, кроме базовых, например:

for (int i =0; i < N; i++)

Я получаю базовую концепцию счетных итераций основных циклов:

for (int i =0; i < N; i++)

Булевское условие равно некоторой переменной (например, N), а затем вычитается из начальной переменной (например, i), а затем делится на число вложенных циклов (в этом случае 1, так как оно не вложено). Таким образом, число итераций для этого цикла будет:

(N - i) / 1

Например, для поиска итераций вложенных циклов это будет повторяться по циклам до тех пор, пока вы не перейдете к самому внутреннему циклу, тогда вы будете краткими целыми циклами для подсчета итераций.

Я просто не понимаю более сложные циклы с различными условиями инкремента, такими как умножение или деление. В частности, как я могу выяснить, сколько раз этот цикл повторяется:

for (int i = 1; i < 1000; i *= 2)
for (int j = 0; j < 1000; j++)

Я знаю, что это должно что-то сделать с суммированием, к сожалению, я не вижу связи. Любые ресурсы или рекомендации будут высоко оценены.

спросил(а) 2013-05-15T02:42:00+04:00 7 лет, 1 месяц назад
1
Решение
107

Я думаю, вы читаете синтаксис цикла неправильно?

Попробуйте прочитать их вслух, например:

для этого цикла:

for (int i = 1; i < 1000; i *= 2)

Синтаксис цикла читает:

Начиная с единицы, продолжайте цикл, пока я меньше тысячи, и каждый раз вокруг цикла умножайте я на два.

Итак, я начинаю с одного и каждый раз умножаюсь на два за цикл - то есть 1, 2, 4, 8, 16.... Это продолжается до тех пор, пока оно не достигнет тысячи (или над ним) - и цикл останавливается.

и для этого цикла:

for (int j = 0; j < 1000; j++)

синтаксис цикла говорит:

Начиная с нуля, продолжайте цикл, а j меньше одной тысячи - и каждый раз вокруг цикла добавьте один в j.

Для вложенных циклов нет разницы, за исключением того, что за каждый раз вокруг внешнего цикла весь внутренний цикл завершается.

Я считаю, что чтение вещей вслух - или звучание их в голове - может действительно помочь понять их.

ответил(а) 2013-05-15T02:57:00+04:00 7 лет, 1 месяц назад
40

Просто выясните, сколько раз каждый из них зацикливается. Это легко, потому что они не являются зависимыми друг от друга (т. j Цикл j не зависит от i).

    Цикл i идет 1, 2, 4, 8, 16,..., 512. Так как он должен быть меньше 1000, он остановится, когда достигнет 1024. Это всего 10 итераций. Подсчитайте их вручную или вычислите log2(1024).

    Петля j идет 0, 1, 2, 3,..., 999. Это всего 1000 итераций.

Таким образом, у вас есть внутренний цикл из 1000 итераций, который повторяется 10 раз внешним контуром. Это всего 10 000 итераций.

ответил(а) 2013-05-15T02:55:00+04:00 7 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема