Re[4]: Динамическое программирование
От: GlebZ Россия  
Дата: 15.12.04 17:21
Оценка: 6 (1)
Здравствуйте, HiFix, Вы писали:

HF>Здравствуйте, FreshMeat, Вы писали:


FM>>Здравствуйте, HiFix, Вы писали:


HF>>>Идешь сюда, смотришь задачу №11, разбираешься .

HF>>>Offtopic: а зачем тебе оно надо?
FM>>Судя по формулировке
FM>>

FM>>Задача Должна быть реализована с помощью Динамического программирования.

HF>Формулировку Динамического программирования в студию! (сам не знаю — хочу узнать).
Система перевода рекурсивных функций из экспоненциальных в линейную зависимость времени выполнения путем сохранения промежуточных результатов функции или их вычисления до основного алгоритма.
Например — числа Фибоначи:

void Calc(int x)
{
    if (x<1) return 0;
    if (x==1) return 1;
    return Calc(x-1)+Calc(x-2);
}

Время выполнения в зависимости от числа растет экспотенциально
При динамическом программировании:

static int tempResult[max];//ессно здесь должен быть динамический массив
void Calc(int x)
{
    if (x<1) return 0;
    if (x==1) return 1;
    if (tempResult[x]!=0)return tempResult[x];
    return (tempResult[x]=Calc[x-1]-Calc[x-2]);
}

Время выполнения линейное, так как используется уже выполненые результаты вычисления функции

В данном случае, классическая задача о ранце с использованием динамического программирования. Решение не привожу, наверняка есть в интере есть до фига информации по данной задаче. После поиска, хотя бы знания останутся.(вот такой я злой)

С уважением, Gleb.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.