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

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

Войти
Регистрация
Восстановить пароль
 
[O]Clic[K]
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 55
#1

Как сократить время работы программы?! - C++

17.03.2013, 14:14. Просмотров 695. Ответов 3
Метки нет (Все метки)

Нужно сократить время работы программы по вычислению чисел Фибоначчи:
Вот мой код:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
 
long TimeH()
{
    __asm rdtsc;
}
int main()
{
    int mas[100];
    int k=0;
    int a=0,b=1,sum,N,A=0,B=0;
    int N_max=0,i_max=0;
    while(1)
    {
        cout<<"Input number:";
        A=0,B=0;
        
        cin>>N;
        
        if(N==0)break;
 
                if(N<=N_max )
        {
            A=TimeH();
            for(int i=0;i<i_max;i++)
            {
                if(mas[i]<N)
                    cout<<mas[i]<<" ";
                else break;
            }
            B=TimeH();
            cout<<endl;
            cout<<"time: "<<B-A<<endl;
        }
 
        if(i_max==0)
        {
            A=TimeH();
            N_max=N;
            while(a<N)
            {
                mas[i_max]=a;
                sum=a+b;
                cout<<a<<" ";
                a=b;
                b=sum;
                i_max++;
            }
            B=TimeH();
            cout<<endl;
            cout<<"time: "<<B-A<<endl;
                
        }
        
 
        if(i_max>0 && N>N_max)
        {
            A=TimeH();
            while(mas[i_max-1]+mas[i_max-2]<N)
            {
                mas[i_max]=mas[i_max-1]+mas[i_max-2];
                i_max++;
            }
            N_max=N;
            for(int i=0;i<i_max;i++)
            {
                if(mas[i]<N)
                    cout<<mas[i]<<" ";
                else break;
            }
            B=TimeH();
            cout<<endl;
            cout<<"time: "<<B-A<<endl;
        }
            
    }
    return 0;
}
Проблема в том, что иногда время работы не уменьшается, а лишь увеличивается. С чем это связанно и можно ли это как-то устранить?!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 14:14     Как сократить время работы программы?!
Посмотрите здесь:

Счастливый билет. Надо сократить время работы программы - C++
Написал 2 программы обе работают очень долго первая 19сек вторая 15сек А надо: Лимит времени 2000/4000/4000/4000 мс. Условие: Надо...

Подскажите, как сократить время работы кода? Проверка на простое число - C++
#include &lt;iostream&gt; using namespace std; int main() { int x, k = 0; cin &gt;&gt; x; for (int i = 1; i &lt;= x;...

Как уменьшить время работы программы? - C++
#include&lt;iostream&gt; using namespace std; int main() { int a,m,n; double d,o,w; cin&gt;&gt;n&gt;&gt;m; a=0; ...

Как подключить библиотеку во время работы программы? - C++
Представьте ситуацию: Я прошу у пользователя ввести имя библиотеки, которая находится в одной папке с программой (библиотек может быть...

как узнать время работы программы решения алгоритма - C++
Добрый вечер! Подскажите, пожалуйста, как сделать так, чтобы программа выводила на экран время, затраченное на решение алгоритма? Можно...

Как измерить время работы программы по сортировке массива? - C++
Общая схема программы Х выглядит следующим образом. а. Выбрать очередной размер массива исходных данных. б. Заполнить массив...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 14:51     Как сократить время работы программы?! #2
Цитата Сообщение от [O
Clic[K];4267751]Нужно сократить время работы программы по вычислению чисел Фибоначчи
- написать код который не содержит лишних действий
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <ctime>
#include <iostream>
using namespace std;
 
int main()
{
    int N = 0;
    cout<<"Enter N : ";cin>>N;
    double Fn_1   = 1;
    double Fn_2   = 0;
    double Fn     = 0;
    clock_t bgn   = clock();
    for(int n = 2; n < N; n++)
    {
        cout<<"F"<<n<<" = "<<(Fn = Fn_1 + Fn_2)<<endl;
        Fn_2 = Fn_1;
        Fn_1 = Fn;
    }
    clock_t end   = clock();
    cout<<"Time of work : "<<((end  - bgn)*1.0/CLOCKS_PER_SEC)<<endl;
    return 0;
}
Миниатюры
Как сократить время работы программы?!  
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 14:53     Как сократить время работы программы?! #3
Проверка тут
http://codepad.org/yNa0BdQb

Enter N : 20
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144
F13 = 233
F14 = 377
F15 = 610
F16 = 987
F17 = 1597
F18 = 2584
F19 = 4181
Time of work : 0 sec
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 15:32     Как сократить время работы программы?!
Еще ссылки по теме:

Как записать адрес в указатель во время работы программы - C++
Нужно чтобы пользователь ввел адрес в сам указатель: int *ptr; cin &gt;&gt; ptr; error C2678: бинарный &quot;&gt;&gt;&quot;: не найден оператор,...

подскажите, как можно сохранить переменную, вводимую во время работы программы после ее закрытия - C++
допустим есть переменная a ... int a; cin&gt;&gt;a; ... при повторном открытии программы переменная нигде не сохранится. как ее...

Написать программу вычисления величины дохода по вкладу. Процентная ставка (% годовых) и время хранения (дней) задаются во время работы программы - C++
1. Написать программу вычисления величины дохода по вкладу. Процентная ставка (% годовых) и время хранения (дней) задаются во время работы...

Время работы программы - C++
как считать?и как микросекунды?именно микросекунды нужны.

Время работы программы - C++
Здорова! Бывает в некоторых задачах нужно сравнить производительность программ, то есть время работы той или иной программы. Как их...

Время работы программы (алгоритма) - C++
не получается посчитать время работы алгоритма программы! #include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; ...


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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.03.2013, 15:32     Как сократить время работы программы?! #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- написать код который не содержит лишних действий
Может все-таки алгоритм
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
//возвращает n-е число Фибоначчи
int fib(int n)
{
  int a = 1, ta, 
      b = 1, tb,
      c = 1, rc = 0,  tc,
      d = 0, rd = 1; 
 
  while (n)
  { 
    if (n & 1)    // Если степень нечетная
    {
      // Умножаем вектор R на матрицу A
      tc = rc;
      rc = rc*a + rd*c;
      rd = tc*b + rd*d;
    } 
 
    // Умножаем матрицу A на саму себя
    ta = a; tb = b; tc = c;
    a = a*a  + b*c;
    b = ta*b + b*d;
    c = c*ta + d*c;     
    d = tc*tb+ d*d;
 
    n >>= 1;  // Уменьшаем степень вдвое
 
  }  
  return rc;
}
Yandex
Объявления
17.03.2013, 15:32     Как сократить время работы программы?!
Ответ Создать тему
Опции темы

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