Как посчитать количество итераций
Перейти к содержимому

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

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

Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль

Поиск по форуму
Расширенный поиск
К странице.

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

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

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

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

Вложения

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.

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

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