当前位置: 首页 > 知识库问答 >
问题:

为什么唯一路径问题的回溯解是O(2^max(m,n))?

景震博
2023-03-14

这是LeetCode的唯一路径问题https://leetcode.com/problems/unique-paths/.

m x n网格上有一个机器人。机器人最初位于左上角(即网格[0][0])。机器人试图移动到右下角(即网格[m-1][n-1])。机器人只能在任何时间点向下或向右移动。

给定两个整数m和n,返回机器人到达右下角可能的唯一路径数。

这是来自教程杯的回溯解决方案https://www.tutorialcup.com/leetcode-solutions/unique-paths-leetcode-solution.htm

import java.util.*;
import java.lang.*;
import java.io.*;
class Solution {
   public static int uniquePaths(int m, int n) {
       if(m == 1 || n == 1)
           return 1;
       return uniquePaths(m-1, n) + uniquePaths(m, n-1);
   }
   
   public static void main(String[] args){
     System.out.print(uniquePaths(2,2));
   }
}

wbesite中提到的最差时间复杂度为O(2^max(m,n))。在我看来这是不对的。

我认为有m*n的可能性,在每个递归步骤中减少一个。

T(mn) = T(mn-1) + T(mn-1)
     = 2 * T(mn-1)
     = 2^mn

所以最糟糕的时间复杂度是O(2^mn)。让我知道我的计算是否正确,或者我是否遗漏了什么

共有1个答案

锺离森
2023-03-14

我认为有m*n的可能性,在每个递归步骤中减少一个。

不,它在每一步中减少n或m。所以:

T(mn) = T(m(n-1)) + T((m-1)n) + 1

这反映了您的递归调用:两个参数(传递给递归调用)的乘积表示剩余问题空间的大小。

为了计算时间复杂度,添加常数项很重要,因为函数的每次调用都代表工时/时间。

此外,使用这种符号,相同但来自不同网格大小的产品之间的区别消失了。应将两个维度分开:

T(m, n) = T(m, n-1) + T(m-1, n) + 1
T(m, 1) = 1
T(1, n) = 1

基本情况表示只剩下一列或一行,然后机器人只能在一个方向上移动——通过一条路径。

 类似资料:
  • 最近,我发现了回溯,没有太多思考就从一个展示了一些数独回溯技巧的家伙那里开始了这本书(https://www.youtube.com/watch?v=G_UYXzGuqvM 这个问题被相应地表述为:使用回溯计算x*y网格中从左下角到右上角的所有路径的数量。这包括以下路径:https://imgur.com/3t3Np4M.请注意,每个点只能访问一次。编写一个函数np(x,y),返回x*y网格中的路

  • 一个位于XxX网格左上角的机器人正试图到达右下角。机器人可以向上、向下、向左或向右移动,但不能访问同一地点两次。右下角有多少条可能的唯一路径? 对此,快速算法解决方案是什么?我花了大量的时间试图找出一个快速算法来解决这个问题。但还是卡住了。 除了回溯之外,使用动态规划来处理唯一路径的快速算法解决方案是什么?可以快速找到10x10网格的结果1,568,758,030,464,750,013,214,

  • 本文向大家介绍什么是回溯法 (Backtracking)?相关面试题,主要包含被问及什么是回溯法 (Backtracking)?时的应答技巧和注意事项,需要的朋友参考一下 找到所有选择,走不通则回溯 假定问题的解是一个向量(a1,a2,a3,...,an),其中的每个元素ai都是问题的一个元素 步骤: 建立一个问题的部分解v=(a1,a2,...,ak) 若这个部分解是可行解,则继续,若不是可行解

  • 本文向大家介绍nodejs的路径问题的解决,包括了nodejs的路径问题的解决的使用技巧和注意事项,需要的朋友参考一下 最近公司的一个开发项目,后端用的是nodejs。这两天需要打包给客户演示,就让公司一个小伙把之前3D机房的打包工具移植过来。打包之后,发现原本在开发环境下的跑的好好的项目,不能访问了。出现项目的首页不能访问的问题: can not get file index.html expr

  • 我对DFS和回溯算法的区别感到困惑。在我看来,回溯只是一个特殊版本的DFS,对吗?

  • 本文向大家介绍Struts2学习笔记(2)-路径问题解决,包括了Struts2学习笔记(2)-路径问题解决的使用技巧和注意事项,需要的朋友参考一下   在struts2中的路径问题是根据Action的路径而不是JSP的路径确定的,所以尽量不要使用相对路径,使用相对路径会让路径问题变得很繁琐很麻烦,有的时候一个细微的变动会导致你需要大的改动。   解决方法其实也很简单:即统一使用绝对路径。   在j