Вот вопрос по поводу сохранения состояний в задаче с использованием динамического программирования.
Каждая проблема DP сохраняет результаты и использует их в дальнейшем для сокращения вычислений. Скажем, мы вычисляем значение функции
f(x,y)=290
и сохраняем его в двумерном массиве $save, так что$save[x][y]=290
. Это можно сделать, когда'f'
зависит только от небольшого количества переменных (например, только от 2 переменных x и y в приведенном выше примере). Но что можно сделать, когда'f'
зависит, скажем, от 10 или 15 переменных. Создание массива из 10 или 15 измерений не будет эффективным с точки зрения использования памяти.Другое решение может заключаться в том, что мы объединяем значения переменных (при условии, что они уникальны) и сохраняем их в ассоциативном массиве, используя полученную в результате объединения строку в качестве ключа. Но объединение — это трудоемкая операция. Итак, у нас есть компромисс между памятью и временем.
Есть ли способ сохранить состояния, если существует большее количество переменных, от которых зависит состояние? Я думаю, что может быть какой-то способ использования OOPS или указателей, но я не совсем могу что-либо обрамить. Какие-либо предложения? Любая идея приветствуется, но предпочтительны решения, касающиеся 'C' или 'PHP'. Я знаю, что "C" не работает с ассоциативными массивами, но мне просто нужен алгоритм/способ сохранения состояний.
map:Tuple->Value
? Однако, если вы собираетесь вычислять ВСЕ возможные входные данные (x_1,x_2,..x_k) до некоторого предела, многомерный массив, вероятно, является лучшим решением (более быстрый доступ, чемmap
, и вы все равно собираетесь заполнить карту, если вы рассчитать все/большинство значений). - person amit   schedule 02.10.2012