Algorithm 求解问题的动态规划技术

Algorithm 求解问题的动态规划技术,algorithm,language-agnostic,dynamic-programming,Algorithm,Language Agnostic,Dynamic Programming,是否可以使用递归+记忆而不是使用表格/迭代来解决任何动态规划问题?或者存在一些必须使用列表/迭代的问题 在使用递归+记忆法解决任何问题时,我们也可以获得相同的时间复杂度。我知道空间复杂度不同,而且递归开销也存在。每个动态规划问题都可以表示为递归关系,可以使用递归+记忆法解决,递归+记忆法可以转换为制表+迭代 当您使用制表法解决DP问题时,您会自下而上地解决问题,通常是通过填充一个n维表。根据表中的结果,然后计算原始问题的解决方案 当您使用记忆法解决DP问题时,您可以通过维护已解决子问题的地图来实

是否可以使用递归+记忆而不是使用表格/迭代来解决任何动态规划问题?或者存在一些必须使用列表/迭代的问题

在使用递归+记忆法解决任何问题时,我们也可以获得相同的时间复杂度。我知道空间复杂度不同,而且递归开销也存在。

每个动态规划问题都可以表示为递归关系,可以使用递归+记忆法解决,递归+记忆法可以转换为制表+迭代

当您使用制表法解决DP问题时,您会自下而上地解决问题,通常是通过填充一个n维表。根据表中的结果,然后计算原始问题的解决方案

当您使用记忆法解决DP问题时,您可以通过维护已解决子问题的地图来实现。从这个意义上说,你是自上而下地做的,你首先要解决顶部的问题,而这个问题通常会向下递归来解决子问题

使用表格+迭代的DP问题的时间复杂性与转换后的等价和正确的记忆+递归版本的解决方案相同。在表格+迭代法中,通常很容易找到时间复杂度。另一方面,DP解决方案的记忆+递归版本更直观易读。

每个动态规划问题都可以表示为递归关系,可以使用递归+记忆来解决,递归+记忆可以转换为制表+迭代

当您使用制表法解决DP问题时,您会自下而上地解决问题,通常是通过填充一个n维表。根据表中的结果,然后计算原始问题的解决方案

当您使用记忆法解决DP问题时,您可以通过维护已解决子问题的地图来实现。从这个意义上说,你是自上而下地做的,你首先要解决顶部的问题,而这个问题通常会向下递归来解决子问题


使用表格+迭代的DP问题的时间复杂性与转换后的等价和正确的记忆+递归版本的解决方案相同。在表格+迭代法中,通常很容易找到时间复杂度。另一方面,DP解决方案的记忆+递归版本更直观、可读性更强。

您的问题并不完全清楚。一般来说,计算的普遍性意味着每个迭代算法都可以使用递归重写。这就是你要问的吗?我知道你在说什么。我想问的是,所有的动态规划问题都可以用递归的方法来解决吗?或者有一些像子集和这样的问题需要用表格来解决,以避免由于递归方法而导致的NP。但是使用递归并不意味着不使用表格。两者都可以组合使用。是和是,只要您使用O1时间访问的备忘录。递归和迭代方法的主要区别在于,在后一种情况下,您需要知道处理子问题的顺序。因此,在递归方法中,您执行相同的操作,但顺序不同。@Konrad Rudolph这是一个不同的点。我想知道,只有使用递归+记忆,我们才能解决动态规划的所有问题。你问的问题还不完全清楚。一般来说,计算的普遍性意味着每个迭代算法都可以使用递归重写。这就是你要问的吗?我知道你在说什么。我想问的是,所有的动态规划问题都可以用递归的方法来解决吗?或者有一些像子集和这样的问题需要用表格来解决,以避免由于递归方法而导致的NP。但是使用递归并不意味着不使用表格。两者都可以组合使用。是和是,只要您使用O1时间访问的备忘录。递归和迭代方法的主要区别在于,在后一种情况下,您需要知道处理子问题的顺序。因此,在递归方法中,您执行相同的操作,但顺序不同。@Konrad Rudolph这是一个不同的点。我想知道,只有使用递归+记忆才能解决动态规划的所有问题。在多项式复杂度下使用递归+记忆能解决子集和问题吗?有人对我说,制表是用来得到多项式时间复杂度的解,而不是递归。每个递归函数/解都可以转换成等价的迭代版本,反之亦然。通常,递归解的空间复杂度较高,但时间复杂度大致相同。我没有太多关于子集和问题的经验,但是有了上面提到的信息,我可以说,只要
记忆不会变成记忆bottleneck@Lucas通过在线快速搜索,我发现对于子集和问题并没有真正的多项式时间复杂度解决方案。此外,我可以看到,大多数在线资料都提到,对于这个问题,两个版本的时间复杂度大致相同。请在制表之前查看此链接,它提到了递归方法的NP。@Lucas递归方法与递归+记忆不同。在简单的朴素递归中,您将一次又一次地计算相同的子问题,而在后者中,您不会。在你发布的链接中提到的递归方法中,没有使用记忆,因此时间复杂度更高。使用递归+多项式复杂度的记忆,可以解决子集和问题吗?有人对我说,制表是用来得到多项式时间复杂度的解,而不是递归。每个递归函数/解都可以转换成等价的迭代版本,反之亦然。通常,递归解的空间复杂度较高,但时间复杂度大致相同。我没有太多关于子集和问题的经验,但有了上面提到的信息,我可以说,只要内存不成为问题的核心,就可以使用递归+记忆来解决这个问题bottleneck@Lucas网上几乎没有快速搜索,我可以看出,对于子集和问题,并没有真正多项式时间复杂度的解决方案。此外,我可以看到,大多数在线资料都提到,对于这个问题,两个版本的时间复杂度大致相同。请在制表之前查看此链接,它提到了递归方法的NP。@Lucas递归方法与递归+记忆不同。在简单的朴素递归中,您将一次又一次地计算相同的子问题,而在后者中,您不会。在您发布的链接中提到的递归方法中,没有使用记忆,因此时间复杂度更高