Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
#1

Циклы и их оптимизация - C++

11.06.2013, 21:41. Просмотров 1415. Ответов 54
Метки нет (Все метки)

Доброго времени суток!
Имеется код программы, необходимо оптимизировать вложенный цикл чтобы время потраченное на выполнение программы уменьшилось после оптимизации на заметное число >1 секунды. Можете по своему усмотрению усложнить код (вложив еще цикл) для заметности автоматизации.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include <math.h>
#include <process.h>
 int main()
{
    int n, i=2, j;
    double sum;
    cout<<"n= ";
    cin>>n;
    for(i=0; i<n+1; i++)
    {
    sum=0;
    for(j=1; j<i+2; j++)
        sum+=(double)1/(i*i+j);
    cout<<"F"<<i<<"="<<sum<<endl;
    }
    system("pause");
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 21:41     Циклы и их оптимизация
Посмотрите здесь:

Оптимизация кода, массивы и циклы - C++
Занимаюсь программированием совсем немного, решил потренироватся. Написал консольное приложение в духе &quot;Matrix&quot;. Там объявленно отдельно...

оптимизация - C++
какие 5 способов оптимизации?

Оптимизация - C++
Мне нужно на определенную часть программы дать указание компилятору не оптимизировать эту часть. Может кто знает как это сделать???? ...

оптимизация обмена - C++
помогите пожалуйста немного переделать код программы! вот условие: Дан файл типа BYTE размером не менее 256 Кбайт. Скопировать...

Серьезная оптимизация - C++
Участвую в олимпиаде, уже придумал алгоритм который обязан работать, но к сожалению вылетаю по тайм_лимит. Алгоритм линейный, я уже не знаю...

Оптимизация программ - C++
Возник такой вопрос. Допустим у меня в функции используется часто некоторое выражение(например, length/2, а length - параметр функции)....

Оптимизация робота - C++
Написал вот эту задачу: Робот Имя входного файла: robot.in Имя выходного файла: robot.out Ограничение по времени: 2 секунды ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:14     Циклы и их оптимизация #21
Ты прав,действительно.

Добавлено через 1 минуту
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
выполняется же сначала внутренний цикл а потом внешний
Да.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:15     Циклы и их оптимизация #22
Цитата Сообщение от Matan! Посмотреть сообщение
выполняется же сначала внутренний цикл а потом внешний
Да.
Нет. С какой стати.
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:16  [ТС]     Циклы и их оптимизация #23
Цитата Сообщение от Matan! Посмотреть сообщение

Да.
Ну получается для выполнения вложенного цикла необходимы данные, но если i=2 убрать и не чего не меняется я тогда не понимаю как, получается что бы решить внутренний он идет во внешний за данными отсюда следует, что выводимый результат надо искать во внешнем цикле?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:18     Циклы и их оптимизация #24
В Си/С++ все выполняется поочередно. Т.е. как написано - так и выполняется.
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:21     Циклы и их оптимизация #25
Цитата Сообщение от lazybiz Посмотреть сообщение
Нет. С какой стати.
Теорию читать надо
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:22  [ТС]     Циклы и их оптимизация #26
Цитата Сообщение от lazybiz Посмотреть сообщение
В Си/С++ все выполняется поочередно. Т.е. как написано - так и выполняется.
подождите, а вот эта строчка не имеет разве значение cout<<"F"<<i<<"="<<sum<<endl; ведь она и выводит весь результат, то есть надо решить вот это sum+=(double)1/(i*i+j); я затупил.... пойду покурю
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:24     Циклы и их оптимизация #27
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
Ну получается для выполнения вложенного цикла необходимы данные, но если i=2 убрать и не чего не меняется я тогда не понимаю как, получается что бы решить внутренний он идет во внешний за данными отсюда следует, что выводимый результат надо искать во внешнем цикле?
Если тебе надо,чтобы i начиналось считаться с 2,так и пиши:
for(i=0; i<n+1; i++)
{
...
}
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:25     Циклы и их оптимизация #28
Эта строчка стоит после вложенного цикла, следовательно выполняться она будет тоже после цикла.

Добавлено через 40 секунд
Matan!, в твоем примере она с 2 начинает считаться?
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:25     Циклы и их оптимизация #29
ведь она и выводит весь результат, то есть надо решить вот это sum+=(double)1/(i*i+j)

Да.
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
12.06.2013, 00:25     Циклы и их оптимизация #30
Вообще, единственная оптимизация(даже не оптимизаци, а ускорение работы) которая тут лезет-паралелить.
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:26     Циклы и их оптимизация #31
Цитата Сообщение от lazybiz Посмотреть сообщение
Matan!, в твоем примере она с 2 начинает считаться?
Я примеры не приводил.В этом примере начинает считаться с 0.
2e1773ce
6 / 6 / 0
Регистрация: 10.03.2013
Сообщений: 96
12.06.2013, 00:26     Циклы и их оптимизация #32
Насчет оптимизации/ускорения , делай везде где можно префиксный инкремент ++i а не i++ (так как во 2 случае создается временная переменная) ,старайся избавится от деления , тк 1 раз поделить это = 8 раз умножить или = 60 раз сложить (по затраченному времени) , кешируй(например в твоей задачке) :
C++
1
 for(j=1; j<i+2; j++)
в
C++
1
 for(j=1 , x = i+2; j < x; j++)
1 раз вычислил , (10) раз сравнил , а не (10) раз вычисляешь и (10) раз сравниваешь.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:26     Циклы и их оптимизация #33
Цитата Сообщение от Matan! Посмотреть сообщение
Если тебе надо,чтобы i начиналось считаться с 2,так и пиши:
for(i=0; i<n+1; i++)
{
...
}
Вот тут с 2-х: for(i=2; i<n+1; i++)
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:27     Циклы и их оптимизация #34
Цитата Сообщение от Wolkodav Посмотреть сообщение
Вообще, единственная оптимизация(даже не оптимизаци, а ускорение работы) которая тут лезет-паралелить.
Тут дай Бог азы объяснить

Добавлено через 36 секунд
Цитата Сообщение от lazybiz Посмотреть сообщение
Вот тут с 2-х: for(i=2; i<n+1; i++)
Да.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:27     Циклы и их оптимизация #35
Цитата Сообщение от 2e1773ce Посмотреть сообщение
делай везде где можно префиксный инкремент ++i а не i++ (так как во 2 случае создается временная переменная)
Чушь.
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:28  [ТС]     Циклы и их оптимизация #36
Цитата Сообщение от Matan! Посмотреть сообщение
Если тебе надо,чтобы i начиналось считаться с 2,так и пиши:
for(i=0; i<n+1; i++)
{
...
}
Мне надо программу в которой есть вложенные цикли и данную программу необходимо оптимизировать, есть еще код но там именно циклы, а с вводом данных мне не понятно, вроде делал а им все равно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
До
for (int j = 0; j < jN; j++){
for (int k = 0; k < kN; k++){
for (int m = 0; m < mN; m++){
 i = j * k + m;
 a[i] = b[i] * c[i] + f[i]/e[i]+ x[i] - y[i] +
  z[i]/r[i] + d[i] * x[i];
}
}
}
после
for (int j = 0; j < jN; j++){
for (int k = 0; k < kN; k++){
 double tmp;
 for (int m = 0; m < mN; m++){
  i = j * k + m;
  tmp = b[i] * c[i] + f[i]/e[i];
  a[i] = tmp - y[i] + z[i]/r[i] + 
  (d[i] + 1) * x[i];
 }
}
}
Оптимизация при помощи разрезания циклов
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:30     Циклы и их оптимизация #37
Цитата Сообщение от Wolkodav Посмотреть сообщение
Вообще, единственная оптимизация(даже не оптимизаци, а ускорение работы) которая тут лезет-паралелить.
А пример показать можешь?Самому интересно

Добавлено через 1 минуту
Цитата Сообщение от lazybiz Посмотреть сообщение
Цитата Сообщение от 2e1773ce Посмотреть сообщение
делай везде где можно префиксный инкремент ++i а не i++ (так как во 2 случае создается временная переменная)
Чушь.
Согласен.Мы делаем щаг,а потом прибавляет,а не наоборот
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
12.06.2013, 00:31     Циклы и их оптимизация #38
Matan!, на C# смог бы, а на плюсах таким не занимался.
2e1773ce
6 / 6 / 0
Регистрация: 10.03.2013
Сообщений: 96
12.06.2013, 00:32     Циклы и их оптимизация #39
Цитата Сообщение от lazybiz Посмотреть сообщение
Чушь.
Ну если это чушь , докажи обратное.
Постфиксный инкремент создает временную копию, где хранит старое значение.
Для встроенных типов разницы нет, а на итераторах, например, префиксный гораздо быстрее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 00:35     Циклы и их оптимизация
Еще ссылки по теме:

Оптимизация программы - C++
Помогите оптимизировать программу, не могу сам. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() ...

Оптимизация программы - C++
Ув. обыватели, Вчера написал &quot;Калькулятор&quot;, но так как я ещё зеленый в программировании на С++, прошу вас показать как и где можно...

Оптимизация алгоритма - C++
Условие: Дана выборка (X_i, Y_i)_{i=1}^N. Предполагается, что она была построена по следующему закону: \begin{cases} Y=\beta \xi...

Оптимизация программы - C++
Нужно, чтобы программа случайным образом придумывала число от 1 до 32767 и печатала его цифры через 2 пробела. (Например, 4236 печатает 4 ...

Оптимизация алгоритма - C++
#include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; #include&lt;iomanip&gt; using namespace std; #define jaba for(i=0; i&lt;k; i++)...


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

Или воспользуйтесь поиском по форуму:
Matan!
267 / 118 / 23
Регистрация: 31.05.2013
Сообщений: 1,016
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:35     Циклы и их оптимизация #40
Цитата Сообщение от 2e1773ce Посмотреть сообщение
Ну если это чушь , докажи обратное.
Учи правила.Другой же результат будет совсем!
Yandex
Объявления
12.06.2013, 00:35     Циклы и их оптимизация
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru