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

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

Восстановить пароль Регистрация
 
[O]Clic[K]
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 55
17.03.2013, 14:14     Как сократить время работы программы?! #1
Нужно сократить время работы программы по вычислению чисел Фибоначчи:
Вот мой код:
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++ подскажите, как можно сохранить переменную, вводимую во время работы программы после ее закрытия
C++ как узнать время работы программы решения алгоритма
Как записать адрес в указатель во время работы программы 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
go
Эксперт C++
3582 / 1362 / 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     Как сократить время работы программы?!
Ответ Создать тему
Опции темы

Текущее время: 00:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru