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

机器人在网格中移动的算法可能的路径和时间复杂度?

司徒池暝
2023-03-14

我不明白下面这个问题的路径数是(xy)/十、Y我理解它来自于从一个X-Y项目路径中选择X项目,但为什么它不选择X项目而不是X-Y选择Y项目而不是X-Y呢?为什么只有x?

机器人位于m x n网格的左上角(下图中标记为“开始”)。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(下图中标记为“Finish”)。有多少条可能的路径?

  1. 所有这些路径都是唯一的吗?
  2. 我怎么确定?
  3. 回溯算法的时间复杂度是多少?

共有3个答案

柯建修
2023-03-14

这是解释。

无论你怎么走,要到达目的地,路径必须有m行和n列。

假设用1表示行,用0表示列。您的路径是一个由m n个字符组成的字符串。但它只能有m1和n0。

如果有mn个不同的字符,排列的数量将是(mn)!但当你有重复的字符时,它将是(MN)/MN参考这个

当然这将是独一无二的。测试它为4*3网格,您可以看到它。

阴波峻
2023-03-14

好的,我给你一个解决这个问题的方法,这样你就有更好的时间来解决它<首先,让我们决定一个求解算法。我们将计算每个细胞到达终点的所有可能路径。该算法将检查单元格,并在其中写入右下单元格之和。我们这样做是因为机器人可以向下移动并跟随任何底部路径,或者向右移动并跟随任何右侧路径,从而增加不同路径的总数。很明显,我要证明这些道路的多样性。如果你愿意,我可以在评论中这样做
对于最右边的底部单元格(finish),单元格的初始值将为1,因为只有一种方法可以从该单元格到达该单元格(完全不移动)。如果单元格不存在(例如,将底部单元格作为最底部的单元格),则其值为0
逐个构建单元格值将生成帕斯卡三角形,其值为(xy)!/x!/y 在(x,y)单元格中,x是从终点到终点的距离,y是1。

说到复杂性,我们将在网格单元上进行x*y迭代,每次迭代都是一个恒定的时间。如果你不想使用回溯算法,你可以使用上面提到的公式,用O(xy)代替O(x*y)

赵雪峰
2023-03-14

这在某种程度上是基于Mukul Joshi的回答,但希望能更清楚一点。

要从0,0x,y,您需要向右移动x次,向下移动y次。

让每个向右移动由0表示,向下移动由1表示。

让一个0s和1s字符串指示从0,0x,y的路径。此路径将包含x0s和y1s。

现在我们要计算所有这样的字符串。这相当于计算任何包含x0s和y1s的字符串的排列次数。这个字符串是一个多集(每个元素可以出现多次),因此我们想要一个多集排列,可以计算为n!/(m1! m2!... mk!)其中n是字符总数,k是唯一字符的数量,miith唯一字符重复的次数。由于总共有x y字符,并且0重复x次并且1重复y次,我们得到(x y)! /x!y!

时间复杂性:

回溯/暴力的时间复杂性将涉及探索所有这些路径。把它想象成一棵树,有(xy)/十、y 离开。我可能错了,但我认为树中的节点数具有分支因子

 类似资料:
  • 我试图解决这个问题: 有一个包含r行和c列的网格。坐在左上角牢房里的机器人只能向两个方向移动,右下。但某些细胞必须避免,机器人不能踩到它们。从左上角到右下角为机器人找到一条路径。 这个问题特别需要一条路径,这似乎是直截了当的: 将网格设置为,我得到的伪代码是 尽管我想知道如何获得所有可能的路径(不仅是计数,还有路径值)。注意,它有r行和c列,所以它不是nxn网格。我试图想出一个DP/递归的解决方案

  • 算法的时间与空间复杂度 看到群里们小伙伴在讨论算法复杂度问题,之前在极客时间看了王争的《数据结构与算法之美》,看的我也晕呼呼的,跟上学时在学校老师的讲的有点不一样了,网上搜了下各种各样的,结合参考作一篇简单易懂的总结。 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 如何评价一个算法的好坏 一般我们会从以下维度来评估算法的优劣 正确性

  • 下面是我写的一些伪代码,给定一个数组A和一个整数值k,如果与k之和中有两个不同的整数,则返回true,否则返回false。我正试图确定这个算法的时间复杂度。 我猜这个算法在最坏的情况下的复杂度是O(n^2)。这是因为第一个for循环运行n次,该循环内的for循环也运行n次。if语句进行一次比较,如果为true,则返回一个值,这两个操作都是常量时间操作。最后的return语句也是一个常数时间操作。

  • 我在理解算法的时间复杂性方面有问题。 让我们举第一个例子,用这个算法在二叉搜索树中进行搜索: 那么,如何计算这个时间复杂度呢? null

  • 我已经通过谷歌和堆栈溢出搜索,但我没有找到一个关于如何计算时间复杂度的清晰而直接的解释。 说代码像下面这样简单: 说一个像下面这样的循环: 这将只执行一次。 时间实际上被计算为而不是声明。

  • 本文向大家介绍k-means算法的时间空间复杂度?相关面试题,主要包含被问及k-means算法的时间空间复杂度?时的应答技巧和注意事项,需要的朋友参考一下 时间复杂度为O(tmnK) t表示迭代次数,m表示数据个数,表示数据特征维度,K表示类簇数 空间复杂度为O((m+K)*n) m表示数据个数,K表示类簇个数,n表示维度,理解就是需要存储数据点和类中心点