Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Мемоизация (memoization)
6 февраля 2009

Мемоизация - это оптимизация с использованием памяти, заключается она в том, чтобы кешировать значения функции при каждом её вызове. Этот приём даёт просто поразительные результаты для любых реккурентных функций, будь то числа Фибоначчи или тот же факториал. Приэтом запись функции остаётся максимально простой, т.е. сводится к записи этого самого реккурентного соотношения. Учти что мемоизация работает только для функций не обладающих энтропией или гистерезисом, т.е. зависимоть значения функции от значений аргументов должна быть строго однозначной.
С применением мемоизации вполне разумно записать классическую рекурсивную функцию для вычисления факториала из учебника математики:
public static class Memoization
{
public static Func<A, R> Memoize<A, R>(this Func<A, R> func)
{
var cache = new Dictionary<A, R>();
return (<img src="images/icons/icon_sleep.png" alt='x-)'> =>
{
R result;
if (!cache.TryGetValue(x, out result))
{
result = func(<img src="images/icons/icon_sleep.png" alt='x-)'>;
cache[x] = result;
}
return result;
};
}
}
class Program
{
static void Main(string[] args)
{
Func<int, long> Factorial = null;
Factorial = (n) => (n > 1) ? n*Factorial(n-1) : 1;
// Внимание, без этой строки вышенаписанную функцию для вычисления факториала применять не разумно!
Factorial.Memoize();

for (int i = 10; i > 0; i--)
{
Console.WriteLine("{0}! = {1}", i, Factorial(i));
}
Console.ReadLine();
}
}
Обрати внимание, что в данном коде, вычисляется только 10!, остальные значения мгновенно берутся из кеша.


Теги: .NET

Статьи по теме:

Объект DataRelation
Применение классов Debug и Trace
Редактор условий установки
Стандартная система типов CTS
Преобразование кодировки символов
Сборки
Применение встроенной функциональности типов данных
Работа с элементами управления
Подключение класса DoughnutMachine к пользовательскому интерфейсу
Создание классов
Разрешения
Параметры компоновки установочной программы
Свойства-наборы
Установка сборок в виде компилированных образов
События жизненного цикла формы
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
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


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Мемоизация (memoization). Регион сайта: Москва и Санкт-Петербург