Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
1

Оптимизация цикла for

23.04.2016, 06:43. Показов 3341. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, пожалуйста, как оптимизируется первый цикл? И чем он отличается от второго?
Первый цикл:
C++
1
2
3
4
5
int a = 2;
    for (int i = 0; i < 5; i++)
    {       
        a += i;
    }
Второй цикл:
C++
1
2
3
4
5
6
int a = 2;
    int c1 = 0, c2 = 5;
    for (int i = c1; i < c2; i++)
    {       
        a += i;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2016, 06:43
Ответы с готовыми решениями:

Оптимизация цикла for
Исходные данные: имеется цикл for, прерывание которого невозможно(должен выполнить все итерации)....

Оптимизация условия цикла while
Доброго времени суток, друзья! Я еще совсем новичок в С++. Подскажите плз как оптимизировать...

Оптимизация цикла по скорости
Помогите пожалуйста оптимизировать данный цикл (изменить его, чтобы он выполнялся быстрее): ...

Оптимизация цикла (перебор 5000000 элементов)
Можно ли как-то оптимизировать данный цикл? for (i=10000000; i&lt;15000000; i++) { for (k = i, j =...

11
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.04.2016, 22:49 2
Что ты вкладываешь в понятие "оптимизируется первый цикл"? Любой культурный компилятор оба цикла превратит в "a=17"
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
24.04.2016, 12:42  [ТС] 3
То есть почему компилятор удаляет этот участок кода из ассемблерного? И чем одна оптимизация хуже другой?
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
24.04.2016, 12:44 4
Потому что результат вычислений постоянный.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
24.04.2016, 13:25 5
Цитата Сообщение от Натали9 Посмотреть сообщение
То есть почему компилятор удаляет этот участок кода из ассемблерного?
Данный код (точнее, оба кода) написаны так, что содержат избыточность. Современные компиляторы в состоянии её удалить. Это общий принцип построения компиляторов. Программист пишет код, компилятор пытается его строить наиболее эффективным образом
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
24.04.2016, 14:35 6
Так а в чём разница между первой и второй оптимизацией? Чем отличается опт, когда мы пишем напрямую и когда мы пишем через с1 и с2?
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
24.04.2016, 14:37 7
Какой ответ ты хочешь услышать? Ничем она не отличается, просто второй вариант посложнее.
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
24.04.2016, 15:55 8
Вот то же самое было сказано преподавателю. Ответом он явно не был доволен(.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
24.04.2016, 16:05 9
Цитата Сообщение от Богрянка Посмотреть сообщение
Так а в чём разница между первой и второй оптимизацией?
В первом случае выполняется только одна оптимизация (грубо говоря, вычисление переменной "a"), во втором случае - две (ещё и замена границ цикла на константы)

Цитата Сообщение от Богрянка Посмотреть сообщение
Вот то же самое было сказано преподавателю
Как показывает жизненный опыт, в 99% случаев утверждения типа "я вот тоже самое сказал(а) преподавателю" не соответствуют действительности

Цитата Сообщение от Богрянка Посмотреть сообщение
Ответом он явно не был доволен
Всё зависит от преподавателя. Многим нужно отвечать именно то, о чём было сказано на лекциях (стандартный бестолковый преподаватель)
2
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
24.04.2016, 16:25 10
Constant propagation (Распространение констант) во втором случае, и в обоих что-то типа размотки цикла. Тут я не уверен.

Добавлено через 3 минуты
Как предмет называется? Теория компиляторов?
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
24.04.2016, 18:28 11
Теория языков программирования и методы трансляции. По сути, мы там пишем компилятор. Вот и должны разбираться в таких мелочах.

Преподавателю просто сказала, что особой разницы нет. Лучше бы я молчала).

Есть еще такой вариант ответа (насчет разности этих 2х ф-ий) , но немного сомневаюсь:
Во втором случае мы не знаем, изменил ли какое-нибудь значение программист, а в первом случае, вставь код хоть куда и он везде покажет одинаковое значение.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
24.04.2016, 18:42 12
Естественно, что во втором случае, если между 2-й и 3-й строкой воткнуть код, то можно исходник привести к виду, на котором оптимизация не отработает (не сможет вычислить конкретные значения c1 и c2 на момент работы цикла for). Возможно, препод это имел в виду. Но тогда вопросы надо ставить более конкретно

Кстати, ответ "Ничем она не отличается, просто второй вариант посложнее" из поста #7 можно считать не правильным. Автор имел в виду, что итоговый код ничем не отличается. Оптимизации, разумеется отличаются, по составу (посты #9 и #10)
1
24.04.2016, 18:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2016, 18:42
Помогаю со студенческими работами здесь

Применение цикла if для определения простых чисел. If внутри цикла for
Доброго времени суток, подскажите пожалуйста, в чем тут дело. С кодом все хорошо, все работает,...

Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла.
Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла.

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного...

Нахождение отрицательного цикла в графе и вывод цикла
Вот программа по нахождению отрицательного цикла в графе и вывод цикла void Floyd(int GR, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru