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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
#1

Кэш.Функции - C++

25.12.2010, 18:58. Просмотров 2239. Ответов 6
Метки нет (Все метки)

Многократно вызываемая функция может запоминать результаты последнего вычисления и если то что требуется она уже делала - то не пересчитывать еще раз, а выдать из ранее посчитанного? Это означает кэширование в программировании? Мне просто надо сделать задачу о числах Фибоначи через функцию с кэшированием.Можете привести пример таких функций? Как сделать числа Фибоначи рекурсивно я знаю, а вот с этим кэшированием не понимаю. Приведите, пожалуйста, примеры таких функций и, если можно с объяснением. СПАСИБО!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кэш.Функции (C++):

кэш процессора - C++
Народ, помогите пожалуйста с такой вещью. Нужно получить информацию о кэше процессора. Были тщетные попытки использовать...

Добавление данных в кэш - C++
Здравствуйте. Есть ли какие-то средства (связанные непосредственно с плюсами или нет), позволяющие влиять на добавление данных в кэш. В...

Буфер, ОЗУ, кэш, регистр процессора - C++
Добрый день! Часто задаю вопросы на форуме в процессе изучения C/C++ и вот. Начал читать про трудности использования getchar() ...

CppWebBrowser и кэш - C++ Builder
Здраствуйте! Интересует вопрос, как имея CppWebBrowser сохранять/загружать кэш и куки не туда/оттуда, где хранятся по умолчанию кэш и...

Вернуть из функции объект класса-родителя функции - C++ Builder
Приветствую всех. Вопрос изложу в коде. class TSomeClass { int data; public: // Правильно ли создана функция? TSomeClass...

Как передать значение параметра функции одного экзешника значению параметра функции другому екзешнику? - C++ Builder
Здравствуйте! Ребята подскажите по такому вопросу. У меня есть консольное приложение в котором происходит копирование файлов из...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
EVP
322 / 244 / 43
Регистрация: 14.12.2010
Сообщений: 465
27.12.2010, 01:04 #2
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
#include <locale.h>
#include <list>
 
class CResult //класс результата m_result = m_a + m_b;
{
private:
    int m_a;
    int m_b;
    int m_result;
 
public:
    CResult(int _a, int _b, int _result)
    {
        m_a = _a;
        m_b = _b;
        m_result = _result;
    }
    bool IsReady(int _a, int _b) const
    {
        return ((m_a == _a) && (m_b == _b));
    }
    int GetResult() const
    {
        return m_result;
    }
};
 
int GetComplexCalculation(int _a, int _b)
{
    #define DCashMaxSize 100
    static std::list<CResult> cash;
    for(std::list<CResult>::iterator iter = cash.begin(); iter != cash.end(); iter++)
    {
        if (iter->IsReady(_a,_b))
        {
            printf("найдено в кеше (a=%d,b=%d,r=%d);\r\n", _a,_b,iter->GetResult());
            return iter->GetResult();
        }
    }
 
    printf("вычисляем (%d + %d); ", _a, _b);
    int result = _a + _b;
 
    printf("добавляем в кеш (%d,%d,%d);\r\n", _a, _b, result);
    if (cash.size() == DCashMaxSize)
        cash.pop_front();
    cash.push_back(CResult(_a, _b, result));
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 4; j++)
            printf("вычисляем %d+%d=%d\r\n",i,j,GetComplexCalculation(i,j));
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 4; j++)
            printf("вычисляем %d+%d=%d\r\n",i,j,GetComplexCalculation(i,j));
    return 0;
}
Работает, если кеш не переполняется..
0
ForEveR
27.12.2010, 10:44
  #3

Не по теме:

EVP, Ух... Зачем же так мешать С и С++?

1
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
27.12.2010, 17:30  [ТС] #4
EVP, Эм... Я в этом коде ничего вообще не понял?!
0
Kami-sama
Заблокирован
27.12.2010, 18:36 #5
Это означает кэширование в программировании?
Нет.
В настоящих языках программирования самое близкое понятие — мемоизация.
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
27.12.2010, 18:59 #6
Если попроще, то
C++
1
2
3
4
5
6
7
unsigned fib(unsigned n)
{
    static std::vector<unsigned> c;
    if (n >= c.size())
        c.resize(n + 1);
    return n <= 1 ? n : c[n] != 0 ? c[n] : c[n] = fib(n - 1) + fib(n - 2);
}
Если в c ещё нет числа, то оно считается и пишется туда, если есть - берётся оттуда.
0
tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
20.01.2011, 19:10 #7
http://www.intuit.ru/department/pl/funcprog/19/ - а здесь видео-лекцию как раз по этой задачи найдете!))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 19:10
Привет! Вот еще темы с ответами:

Функции в Assembler, вызов функции в C++ - C++ Builder
Здравствуйте, я составил функции на языке Assembler и вставил ее в код на C++: extern &quot;C&quot; { int INCREMENT(int a); } _asm {...

Что такое "кэш" в android? Как можно программно сохранить что-то в кэш? - Программирование Android
что такое КЭШ в android? как можно программно сохранить что то в кэш??можете дать ссылку??

Кэш Windows XP - Windows XP
Помогите, пожалуйста ! Имеется сервер (Linux) и пользовательские компы (Windows XP), Инет работает прекрасно. Но тут как отключил...

Кэш эскизов - Windows 7
Привет. У меня периодически сам очищается кэш эскизов и все кэшируется заново,можно как нибудь это исправить?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.01.2011, 19:10
Ответ Создать тему
Опции темы

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