27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
1

Кэш.Функции

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

Многократно вызываемая функция может запоминать результаты последнего вычисления и если то что требуется она уже делала - то не пересчитывать еще раз, а выдать из ранее посчитанного? Это означает кэширование в программировании? Мне просто надо сделать задачу о числах Фибоначи через функцию с кэшированием.Можете привести пример таких функций? Как сделать числа Фибоначи рекурсивно я знаю, а вот с этим кэшированием не понимаю. Приведите, пожалуйста, примеры таких функций и, если можно с объяснением. СПАСИБО!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2010, 18:58
Ответы с готовыми решениями:

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

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

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

Определить наличие кэш памяти процессора и его параметров (ассемблерные вставки)
Необходимо определить наличие кэш памяти процессора и его параметров с ассемблерными вставками. Из...

6
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
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
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
27.12.2010, 17:30  [ТС] 4
EVP, Эм... Я в этом коде ничего вообще не понял?!
0
Заблокирован
27.12.2010, 18:36 5
Это означает кэширование в программировании?
Нет.
В настоящих языках программирования самое близкое понятие — мемоизация.
0
2832 / 1641 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
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
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
20.01.2011, 19:10 7
http://www.intuit.ru/department/pl/funcprog/19/ - а здесь видео-лекцию как раз по этой задачи найдете!))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2011, 19:10
Помогаю со студенческими работами здесь

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

Как работает кэш?
Здравствуйте! Хочу понять как работает кэш. Задание такое: Нам надо нарисовать желтый квадрат на...

C++ Кэш процессора (__cpuid)
Нужно получить кэш процессора. Сумму L1, L2, L3 или по отдельности - не важно. Нашёл решение для...

Работа с КЭШ памятью
Здравствуйте. Порекомендуйте пожалуйста литературу где хорошо описано, как работать с КЭШ памятью в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru