Перейти к содержимому

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

  • автор:

Как поcчитать количество итераций в цикле?

Мне интересно сколько итераций выполнится во внешнем и внутреннем цикле.

  • Вопрос задан более трёх лет назад
  • 6121 просмотр
  • Facebook
  • Вконтакте
  • Twitter

0xD34F

Определяете целочисленную переменную перед внешним циклом, делаете ей ++ во внутреннем:

Если надо суммарное количество итераций обоих циклов — тогда и во внешнем тоже ++.

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

Не совсем представляю, как это осуществить. Т.е. возвращается х, а еще что-то вернуть, то будет немного не так, как хотелось бы, по идее. Т.е. посчитать в ду-вайл это не проблема, проблема именно это потом вывести в main() и только это. Т.е. нужно выводить x и этот счетчик.

Посчитать количество итераций цикла
#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; int main().

Посчитать количество итераций цикла
#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; int main().

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real;.

Лучший ответСообщение было отмечено Minchanin-Bel как решение

Решение

Вот как-то так получилось. Немного напрягает, что во всех случаях 19, все верно?

Сообщение от Minchanin-Bel

Посчитать количество итераций при рекурсивном вызове функции
void hoarSort(int* arrPtr, int first_element, int last_element, int lenght_array, int etheration).

Найти сумму кратных 5 чисел от 1 до N и посчитать их количество. Использовать оператор цикла for
Найти сумму кратных 5 чисел от 1 до N и посчитать их количество. Использовать оператор цикла for.

Количество итераций цикла
Привет, не могу разобраться как вывести количество итераций цикла if. Пробую через сделать это.

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

поскольку не было подходящей ветки, я запостился именно здесь.

Вопрос не простой:
есть несколько циклов — это число постоянное
один цикл вложен в другой и так далее по цепочке

собственно сам вопрос в прикрепленном текстовом файле — большое СПС админу и модератору этого форума за ограничения размера сообщений!

tema.txt (11.7 Кб, 164 просмотров)

вопрос состоит не в том, — хороший ли это алгоритм или плохой ?

дело в том, что перебрать все возможные варианты можно только так.

мне что нужно было .

— мне нужно было узнать: сколько максимум может быть итераций, чтобы посчитать примерное время проведения тестирования в секундах для одной такой итерации и потом умножить на общее количество итераций,

так что: к алгоритму просьба не придираться!

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

После того, как время будет измерено, делаем перерасчёт его на нужное число итераций.
Например: в 3-х циклах, по три итерации (это 3*3*3), мы получили время в 1мкс (1/27 и даст нам искомое время для всех итераций). Теперь, нам надо узнать время выполнения алгоритма для 10*10*10 итераций получаем формулу (10*10*10)*1/27.
Вот, примерно так.
Да, и ещё, если Вы используете циклы while со значениями итераций вычисляемые в самих циклах, то определить время их выполнения можно лишь приблизительно или экспериментально.

а вот, как сделать, чтобы можно было подсчитать с точностью до +/- 1 цикла всё это, учитывая первый неправильный старт каждого из циклов ?
Smitt&Wesson
Посмотреть профиль
Найти ещё сообщения от Smitt&Wesson


Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке — https://slurm.club/3MeqNEk

Определение количества итераций в цикле (Java)

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

2 ответа

Не обращая внимания на какие-либо особые нарушения цикла (обрывы, изменение счетчика и т. Д.), Вы можете проверить следующую формулу. Если тест завершения — это < , а не <= , вы должны вычесть 1 из начала.

Если исключить какие-либо особые нарушения цикла (обрывы, изменение счетчика и т. Д.), Формула выглядит следующим образом:

Итераций = (конец — начало + incr) / incr, где оператор отношения> = или , то итерации = (конец — начало + incr-1) / incr

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

Автор заявил, что внутренний цикл for повторяется ровно N * (N-1) / 2 раз, но не дает никаких оснований для того, как он пришел к такому уравнению. Я понимаю N * (N-1), но зачем делить на 2? Я сам запускал код и, конечно же, когда N равно 10, внутренний цикл повторяется 45 раз (10 * 9/2).

Я сам испортил код и попробовал следующее (присвоил только i j):

При N = 10 получается 55. Итак, у меня проблемы с пониманием математики, лежащей в основе. Конечно, я мог бы просто вставить все значения и пробиться через проблему, но я чувствую, что есть что-то важное и очень простое, чего мне не хватает. Как бы вы пришли к уравнению для описания только что построенного цикла for? Есть ли способ сделать это, не полагаясь на результаты? Был бы очень признателен за любую помощь, спасибо!

задан 06 июля ’10, 16:07

Обратите внимание, что у вас есть n во внешнем цикле и N во внутреннем цикле. Это опечатка? Потому что, если это не опечатка, ответ будет другим. — IVlad

извините да это должна быть заглавная буква N — Sam

4 ответы

Подумайте, что происходит каждый раз, когда повторяется внешний цикл. Первый раз, i == 0 , поэтому внутренний цикл начинается с 1 и бежит к N-1 , Которая является N-1 всего итераций. В следующий раз через внешний цикл, i увеличился до 1 , поэтому внутренний цикл начинается с 2 и подбегает к N-1 в общей сложности N-2 итераций. И этот шаблон продолжается: в третий раз через внешний цикл вы получите N-3 итераций, четвертый раз, N-4 и т. д. Когда вы дойдете до последней итерации внешнего цикла, i == N-1 , поэтому внутренний цикл начинается с j = N и немедленно останавливается. Так что это ноль итераций.

Общее количество итераций — это сумма всех этих чисел:

Если взглянуть на это с другой стороны, это просто сумма положительных целых чисел из 1 в N-1 . Результат этой суммы называется (N-1) -м. треугольное числои Википедия объясняет, как вы можете найти, что формула для n-го треугольного числа равна n (n + 1) / 2. Но здесь у вас есть (N-1) -е треугольное число, поэтому, если вы установите n=N-1 , ты получаешь

Создан 06 июля ’10, 20:07

Вы смотрите на вложенные циклы, в которых выполняется внешний N раз и внутренний (N-1) . Фактически вы складываете сумму 1 + 2 + 3 + .

N * (N+1) / 2 это «классическая» формула в математике. Молодой Карл Гаусс, впоследствии известный математик, получил задание в классе сложить числа от 1 до 100. Учитель ожидал, что дети будут заняты в течение часа, но Карл почти сразу придумал ответ: 5050. Он объяснил. : 1 + 100; 2 + 99; 3 + 98; 4 + 97; и так далее до 50 + 51. Это 50 сумм по 101 каждая. Вы также можете увидеть это как (100/2) * (100 + 1); вот где /2 происходит от.

Что касается того, почему это (N-1) вместо (N + 1), о котором я упоминал . это может быть связано с началом с 1, а не с 0, я думаю, что это приведет к потере одной итерации из внутреннего цикла.

+1 приятное объяснение, также вы правы насчет того, что начинаете с 1, а не с 0. — Дэвид З

не должно быть «до 50 + 51»? — Лука Молтени

@Luca Molteni: Безусловно, хороший улов! Это оставалось незамеченным более 2-х лет;) — Карл Смотрич

Посмотрите, сколько раз внутренний (j) цикл выполняется для каждого значения i. Когда N = 10, внешний (i) цикл выполняется 10 раз, а j-цикл должен выполняться 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 раз. Теперь вы просто складываете эти числа, чтобы увидеть, сколько раз выполняется внутренний цикл. Вы можете суммировать числа от 0 до N-1 по формуле N (N-1) / 2. Это очень небольшая модификация известной формулы для сложение чисел от 1 до N.

В качестве наглядного пособия вы можете понять, почему 1 + 2 + 3 + . + п = п * (п + 1) / 2

Сумма от 1 до N

@ Гарольд: Вы называете это визуальный доказательство? Взгляните на # 4 в моем собственном Шесть наглядных доказательств. �� — Билл Ящерица

Только что проверил ваши Шесть наглядных подтверждений и несколько других страниц вашего сайта . Отличная работа. Спасибо. — НилБи

Спасибо @NealB, я очень ценю отзывы. — Билл Ящерица

Я уже видел ваши визуальные доказательства, спасибо, что разместили их. Я думал, что изображение для «Доказательства 1» очень похоже на ваше. — Гарольд Л

Если вы посчитаете итерации внутреннего цикла, вы получите:

1 2 3 4 5 6 7 8 9 10

Чтобы получить общую сумму за произвольное количество итераций, вы можете «обернуть» числа следующим образом:

Теперь, если мы добавим каждый из этих столбцов, все они добавятся к 9 (N-1), и получится 5 (N / 2) столбцов. Совершенно очевидно, что для любого четного N мы все равно получим N / 2 столбца, каждый из которых суммируется до (N-1). Таким образом, когда общее количество итераций четное, общее количество итераций всегда (N / 2)(N-1), который (благодаря свойству коммутативности) мы можем переписать как N(Н-1) / 2.

Если бы мы сделали то же самое для нечетного количества итераций, у нас был бы один «нечетный» столбец, который нельзя было бы объединить в пары. В этом случае мы можем игнорировать «0», так как мы знаем, что это не повлияет на общую сумму в любом случае. Например, давайте рассмотрим N = 9 вместо N = 10. Для этого получаем:

Это дает нам (N-1) / 2 столбца (9-1 = 8, 8/2 = 4), каждый из которых в сумме дает N, поэтому сумма будет N * (N-1) / 2. Несмотря на то, что мы пришли к этому несколько иначе, это точное совпадение с формулой выше для случая, когда N четно. Опять же, кажется довольно очевидным, что это останется верным независимо от количества используемых столбцов (т. Е. От общего количества итераций).

Для любого N (нечетного или четного) сумма чисел от 0 до N-1 равна N * (N-1) / 2.

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

-Конечно, язык MQL4 отличается от C++, но в целом синтаксис и базовая часть идентичны, и

поскольку не было подходящей ветки, я запостился именно здесь.

Вопрос не простой:
есть несколько циклов — это число постоянное
один цикл вложен в другой и так далее по цепочке

собственно сам вопрос в прикрепленном текстовом файле — большое СПС админу и модератору этого форума за ограничения размера сообщений!

Вложения

tema.txt (11.7 Кб, 164 просмотров)

вопрос состоит не в том, — хороший ли это алгоритм или плохой ?

дело в том, что перебрать все возможные варианты можно только так.

мне что нужно было .

— мне нужно было узнать: сколько максимум может быть итераций, чтобы посчитать примерное время проведения тестирования в секундах для одной такой итерации и потом умножить на общее количество итераций,

так что: к алгоритму просьба не придираться!

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

После того, как время будет измерено, делаем перерасчёт его на нужное число итераций.
Например: в 3-х циклах, по три итерации (это 3*3*3), мы получили время в 1мкс (1/27 и даст нам искомое время для всех итераций). Теперь, нам надо узнать время выполнения алгоритма для 10*10*10 итераций получаем формулу (10*10*10)*1/27.
Вот, примерно так.
Да, и ещё, если Вы используете циклы while со значениями итераций вычисляемые в самих циклах, то определить время их выполнения можно лишь приблизительно или экспериментально.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *