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

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

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

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

11.06.2013, 21:41. Просмотров 1421. Ответов 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 секунды ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 22:57     Циклы и их оптимизация #2
Единственное что приходит в голову - это lookup table.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using namespace std;
 
static const size_t n_max = 55;
static double       lut[n_max * n_max + n_max + 1];
 
int main()
{
    int     n, i, ii, j;
    double  sum;
 
    cout << "n = ";
    cin >> n;
 
    if ( n > n_max ) {
        cout << "n must be less or equal " << n_max << endl;
        return 1;
    }
 
    // precalculate values
    for ( i = 0; i < n + 1; i++ ) {
        for ( j = 1; j < i + 2; j++ ) {
            lut[i * i + j] = 1. / (i * i + j);
        }
    }
 
    for ( i = 0; i < n + 1; i++ ) {
        ii = i * i;
 
        sum = 0;
        for ( j = 1; j < i + 2; j++ ) {
            sum += lut[ii + j];
        }
 
        cout << "F" << i << " = " << sum << endl;
    }
    return 0;
}
На сколько это ускорит процесс я не знаю.. надо замерять.
С другой стороны я не вижу ни одной причины, по которой стоит оптимизировать этот цикл.
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 23:03  [ТС]     Циклы и их оптимизация #3
А что программа делает, я ввожу число понятно, результат она его делит на что то,объясните смысл программы, не могу понять вот это:
C
1
2
for(j=1; j<i+2; j++)
        sum+=(double)1/(i*i+j);
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 23:05     Циклы и их оптимизация #4
Это твоя программа, ты мне должен объяснять что она делает.
Зачем тебе понадобилась оптимизация цикла, который ты не знаешь для чего и как работает?
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 23:07  [ТС]     Циклы и их оптимизация #5
Цитата Сообщение от lazybiz Посмотреть сообщение
Это твоя программа, ты мне должен объяснять что она делает.
сижу, разбираюсь в оптимизации циклов, уже 12 часов сижу, голова кругом, нашел какую то программу, увидел вложенный цикл решил поинтересоваться для общего развития как можно оптимизировать и что она делает, я сам понять не могу. А Вы бы не могли подсказать?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 23:11     Циклы и их оптимизация #6
Если тебе нужны приемы оптимизации то я привел тебе один.
Для того чтобы понять как он работает не надо знать для чего нужна эта программа и какие магические числа она считает.
Matan!
269 / 120 / 23
Регистрация: 31.05.2013
Сообщений: 1,026
Записей в блоге: 2
Завершенные тесты: 1
11.06.2013, 23:44     Циклы и их оптимизация #7
на всякий случай приведу комментарии

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>  //подключение библиотек
#include <math.h>
#include <process.h>
 int main()
{
    int n, i=2, j;   // i, j - счётчики циклов
    double sum;
    cout<<"n= ";  //это число,которое вводим, должно быть максимальным
    cin>>n;
    for(i=0; i<n+1; i++)  //если n максимальное число,
                                //то незачем прибавлять к нему 1, проще записать for(i=0; i<=n; i++)
    {
    sum=0;    //сначала сумма была равна 0...
    for(j=1; j<i+2; j++)
        sum+=(double)1/(i*i+j);  //приведение типов в С++
    cout<<"F"<<i<<"="<<sum<<endl;
    }
    system("pause");  //останавливаем прогу,чтобы посмотреть на её результат
   return 0;
}
Добавлено через 2 минуты
попытайтесь оптимизировать прогу,путём изменения входных данных.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 23:47     Циклы и их оптимизация #8
Цитата Сообщение от Matan! Посмотреть сообщение
путём изменения входных данных.
А можно оптимизировать программу путем изменения алгоритма?
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 23:51  [ТС]     Циклы и их оптимизация #9
Ну вот смотрите: sum+=(double)1/(i*i+j); sum += i; // Оператор цикла, double - обозначает дробную переменную
получается 1/(i*i+j) то есть с математической точки зрения 1/(n*n+i+2) 1/(150*150+150+2)... 150 это допустим число повторений или с чего начинается сама программа? если с чего начинается сама программа то 1... Правильно я мыслю?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 23:53     Циклы и их оптимизация #10
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
Правильно я мыслю?
Хз. Я не понял что ты сказал.
А ты в Си/С++ вообще разбираешься?
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 23:54  [ТС]     Циклы и их оптимизация #11
Цитата Сообщение от lazybiz Посмотреть сообщение
Хз. Я не понял что ты сказал.
А ты в Си/С++ вообще разбираешься?
есть немного, ну так совсем чуть чуть
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.06.2013, 23:55     Циклы и их оптимизация #12
Не рановато ты в оптимизацию полез?!
Matan!
269 / 120 / 23
Регистрация: 31.05.2013
Сообщений: 1,026
Записей в блоге: 2
Завершенные тесты: 1
11.06.2013, 23:55     Циклы и их оптимизация #13
Цитата Сообщение от lazybiz Посмотреть сообщение
А можно оптимизировать программу путем изменения алгоритма?
Алгоритм и так прост,как тибетский валенок)
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 23:58  [ТС]     Циклы и их оптимизация #14
Ну смотри: for(j=1; j<i+2; j++) sum+=(double)1/(i*i+j);i=2 получается по условию задачи в объявлении переменной, j исходя из описания цикла получается <i+2 получается сумма=1/(2*2+3)=1/7=0,14 отсюда следует программа запрашивает число повторений допустим 10, стартовое значение получается 1, потом пробегая по циклам в результате чего совершив 1 цикл делит 1на0.14 верно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 00:02     Циклы и их оптимизация
Еще ссылки по теме:

Оптимизация программы - 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!
269 / 120 / 23
Регистрация: 31.05.2013
Сообщений: 1,026
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:02     Циклы и их оптимизация #15
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
(double)1/(i*i+j)
это приведение типов.Почитай учебник.У тебя i и j целые и в знаменателе,поэтому надо перевести это выражение в double.

Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
sum += i
- это просто sum =sum + i.
Yandex
Объявления
12.06.2013, 00:02     Циклы и их оптимизация
Ответ Создать тему
Опции темы

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