Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Натали9
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
1

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

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

Скажите, пожалуйста, как оптимизируется первый цикл? И чем он отличается от второго?
Первый цикл:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2016, 06:43
Ответы с готовыми решениями:

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

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

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

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

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

11
Evg
Эксперт CАвтор FAQ
20074 / 7641 / 585
Регистрация: 30.03.2009
Сообщений: 21,398
Записей в блоге: 30
23.04.2016, 22:49 2
Что ты вкладываешь в понятие "оптимизируется первый цикл"? Любой культурный компилятор оба цикла превратит в "a=17"
0
Натали9
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 10
24.04.2016, 12:42  [ТС] 3
То есть почему компилятор удаляет этот участок кода из ассемблерного? И чем одна оптимизация хуже другой?
0
nmcf
6531 / 5755 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
24.04.2016, 12:44 4
Потому что результат вычислений постоянный.
1
24.04.2016, 12:44
Evg
Эксперт CАвтор FAQ
20074 / 7641 / 585
Регистрация: 30.03.2009
Сообщений: 21,398
Записей в блоге: 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
nmcf
6531 / 5755 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
24.04.2016, 14:37 7
Какой ответ ты хочешь услышать? Ничем она не отличается, просто второй вариант посложнее.
0
Богрянка
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 3
24.04.2016, 15:55 8
Вот то же самое было сказано преподавателю. Ответом он явно не был доволен(.
0
Evg
Эксперт CАвтор FAQ
20074 / 7641 / 585
Регистрация: 30.03.2009
Сообщений: 21,398
Записей в блоге: 30
24.04.2016, 16:05 9
Цитата Сообщение от Богрянка Посмотреть сообщение
Так а в чём разница между первой и второй оптимизацией?
В первом случае выполняется только одна оптимизация (грубо говоря, вычисление переменной "a"), во втором случае - две (ещё и замена границ цикла на константы)

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

Цитата Сообщение от Богрянка Посмотреть сообщение
Ответом он явно не был доволен
Всё зависит от преподавателя. Многим нужно отвечать именно то, о чём было сказано на лекциях (стандартный бестолковый преподаватель)
2
nmcf
6531 / 5755 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
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
20074 / 7641 / 585
Регистрация: 30.03.2009
Сообщений: 21,398
Записей в блоге: 30
24.04.2016, 18:42 12
Естественно, что во втором случае, если между 2-й и 3-й строкой воткнуть код, то можно исходник привести к виду, на котором оптимизация не отработает (не сможет вычислить конкретные значения c1 и c2 на момент работы цикла for). Возможно, препод это имел в виду. Но тогда вопросы надо ставить более конкретно

Кстати, ответ "Ничем она не отличается, просто второй вариант посложнее" из поста #7 можно считать не правильным. Автор имел в виду, что итоговый код ничем не отличается. Оптимизации, разумеется отличаются, по составу (посты #9 и #10)
1
24.04.2016, 18:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 18:42

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

вывод на экран чисел 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® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru