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

Как оптимизировать код? - C++

Восстановить пароль Регистрация
 
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
28.08.2013, 18:18     Как оптимизировать код? #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
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
 
int fib(int);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int countFib;
    ifstream in("INPUT.TXT");
    in >> countFib;
    ofstream out("OUTPUT.TXT");
 
    for (int i = 0; i < countFib; i++)
    {
        
        if (i % 10 == 0 && i > 0)
            cout << endl;
        fib(i);
        if(fib(i)==countFib){
            out << '1' << '\n' << i+1;
            break;}
        else {
            if(i==countFib-1){
            ifstream po("OUTPUT.TXT");
            int z;
            po >> z;
            if(z==1 || z=='\0') break;
            else {
             out << '0';
             break;
            }
            }
        
        }
        
}
 
    cout << endl;
    system("pause");
    return 0;
}
 
 
int fib(int n)          //функция возвращает n-ое число Фибоначчи
{
     if (n == 0)
         return 0;
     if (n == 1) 
         return 1;
     else return fib(n - 1) + fib(n - 2);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
28.08.2013, 18:26     Как оптимизировать код? #2
Цитата Сообщение от Toshik_ Посмотреть сообщение
fib(i);
* * * * if(fib(i)==countFib)
два раза вызываешь функцию зачем?
Цитата Сообщение от Toshik_ Посмотреть сообщение
for (int i = 0; i < countFib; i++)
* * {
if (i % 10 == 0 && i > 0)
остаток от деления дорогого стоит
введи еще одну переменную
например так
C++
1
2
3
4
5
6
7
8
9
10
int tmp=10;
for (int i = 0; i < countFib; i++)
{
   if (!tmp)
    {
     cout << endl;
    tmp=10;
    }
   else
     tmp--;
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
28.08.2013, 18:36  [ТС]     Как оптимизировать код? #3
Цитата Сообщение от ValeryS Посмотреть сообщение
два раза вызываешь функцию зачем?
остаток от деления дорогого стоит
введи еще одну переменную
например так
C++
1
2
3
4
5
6
7
8
9
10
int tmp=10;
for (int i = 0; i < countFib; i++)
{
   if (!tmp)
    {
     cout << endl;
    tmp=10;
    }
   else
     tmp--;
Дело в том что если ввести число Фибоначи тогда быстро выполняется программа, а так она зависает...
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
28.08.2013, 18:45     Как оптимизировать код? #4
Сохранять промежуточное значение вычислений, а не вычислять элемент последовательности заново.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class FibonacciSequence {
 public:
  FibonacciSequence(long long first, long long second) : first(first), second(second) {}
  long long advance() {
    second = first + second;
    first = second - first;
    return first;
  }
 private:
  long long first, second;
};
 
int main(int, char**) {
  FibonacciSequence s(0, 1);
  int count = 55;
  for (int i = 0; i < count; ++i) {
    std::cout << s.advance() << std::endl;
  }
}
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.08.2013, 20:48     Как оптимизировать код? #5
Зачем вообще что-то вычислять? Чисел Фибоначчи, меньших 264, всего 94 штуки.
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
28.08.2013, 21:21     Как оптимизировать код? #6
что эта чудесная программа должна делать?
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,651
Записей в блоге: 1
28.08.2013, 21:42     Как оптимизировать код? #7
Цитата Сообщение от salam Посмотреть сообщение
что эта чудесная программа должна делать?
Во-о-о-т (наконец-то), с этого ТС следовало начинать!
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
29.08.2013, 17:41     Как оптимизировать код? #8
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Зачем вообще что-то вычислять? Чисел Фибоначчи, меньших 264, всего 94 штуки.
Согласен. Самый быстрый способ - lookup table.
ValeryS
29.08.2013, 18:05
  #9

Не по теме:

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Чисел Фибоначчи, меньших 2 64, всего 94 штуки.
интересно предыстория этого вопроса
исследовалось увеличение популяции кроликов, если учесть что через месяц они начинают спариваться и через месяц рождают еще одну пару

получается что меньше чем восемь лет кроликов будет больше чем 264 пар (это же ужас), что Австралия и получила

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 18:19     Как оптимизировать код?
Еще ссылки по теме:

C++ Оптимизировать код
C++ Оптимизировать и минимализировать код
C++ Как оптимизировать код, со множеством операторов if?

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
29.08.2013, 18:19     Как оптимизировать код? #10
Замени рекурсию на цикл с сохранением предыдущих чисел. Тогда тебе не надо будет постоянно пересчитывать заново.
Yandex
Объявления
29.08.2013, 18:19     Как оптимизировать код?
Ответ Создать тему
Опции темы

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