【发布时间】:2012-10-02 07:06:19
【问题描述】:
这是一个关于使用动态编程在问题中保存状态的问题。
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,无论如何您都要填充地图如果您计算所有/大多数值)。 -
您应该重新格式化这个问题以使其更具可读性。没有段落,一堆粗体字真的很难读。
-
@amit 我已经尝试使用 k=10 的 10 维数组来执行此操作,但它需要非常高的内存。您能提出更好的解决方案吗?
-
@verdesmarald 我已经做到了。谢谢。
-
使用 vars 的 hash 作为 key,将 function 和 vars 存储在 1:n 表中?
标签: php c algorithm dynamic-programming