这是一个关于使用动态编程在问题中保存状态的问题。
DP的每个问题都会保存结果并进一步使用它们来减少计算量。让我们说,我们计算函数值f(x,y)=290
并将其保存在二维数组$ save中,例如$save[x][y]=290
。当'f'
仅依赖于少量变量时(例如上例中仅有2个变量x和y),可以这样做。但当'f'
依赖于10或15个变量时可以做些什么。制作10或15维的数组不会节省内存。
另一个解决方案可能是我们连接变量的值(假设它们是唯一的)并将它们存储在关联数组中,使用由串联是关键。但是,连接是一项耗时的操作。 因此,我们在记忆和时间之间进行权衡。
如果状态所依赖的变量数量较多,是否可以存储状态?我认为可能有某种方式使用OOPS或指针,但我不太能够框架任何东西。有什么建议?我们很感激每个想法,但首选的是关于' 或' PHP' 的解决方案。我知道' C'没有处理关联数组,但是我只想要一种算法/方法来保存状态。
答案 0 :(得分:3)
在稀疏数据中保存状态通常使用map
(Associative Array)接口完成。虽然C没有内置 - 互联网上到处都是提供此功能的库。
如果你打算计算大部分/全部(x1,...,xk)值 - 不建议使用map
- 它会更慢并且不会节省内存(实际上,这些情况的另一种方式)。如果是这种情况 - 多维数组可能是最佳解决方案。
在DP中很多时候,你不需要一个所有阵列到目前为止的信息,只需要先前计算的“线”,并覆盖数组。实际上 - 对于许多需要k * N表的DP问题,实际上只需要大小为2 * N的表,并迭代覆盖相同的行。同样的原则可以适用于我认为的任何维度 - 如果您需要的只是前一行的数据,而不是所有数据。