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

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

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

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

17.03.2013, 14:14. Просмотров 718. Ответов 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;
}
Проблема в том, что иногда время работы не уменьшается, а лишь увеличивается. С чем это связанно и можно ли это как-то устранить?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 14:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сократить время работы программы?! (C++):

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

3
-=ЮрА=-
Заблокирован
Автор 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;
}
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
0
go
Эксперт С++
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;
}
0
17.03.2013, 15:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 15:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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