当前位置: 首页 > 网络应用技术

多少种Python爬楼梯

时间:2023-03-06 10:53:04 网络应用技术

  简介:许多朋友询问与Python攀登楼梯有关的问题。本文的首席CTO注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!

  本文目录清单:

  1. Python算法攀爬楼梯和递归功能2. Python攀登楼梯(LINTCODE)3。PYTHON动态计划和编辑距离计算示例4. Python攀登楼梯至少可以使用fibonacci解决此问题。

  楼梯上有n层,一次只能采取1或2层,并且最终的n层必须步行。

  F(1)= 1

  F(2)= 2

  f(n)= f(n-) + f(n-2)(n = 3)

  这是递归写作方法,但会导致堆栈溢出。在计算机中,该功能的调用是通过堆栈实现的。如果递归调用的数量太大,则会导致堆栈溢出。

  在这种情况下,有必要使用两者更改为非传回功能。

  递归维修,并且实现周期不会导致堆栈溢出

  爬楼梯

  原始地址:

  假设您正在爬楼梯,您需要n步骤才能到达顶部。但是每次您只能爬上一两个步骤时,您才能爬到建筑物顶部有多少种不同的方法?

  例如,n = 3,1+1+1 = 1+2 = 2+1 = 3,总共有3种不同的方法

  返回3

  这个问题本质上是纤维纤维蛋白的应用。

  假设总共有10个楼梯,每个步骤都可以攀登1或2步,然后您将总共爬到10级,总共两种方法,距离第8步2步,或从第9步爬1步。步骤,然后爬到9级也是相同的。这样,这就是基本纤维。

  递归算法

  TED斐波那契报价:

  还有一种方法可以迅速寻求权力:

  动态计划的三个要素:最佳子结构,边界和状态传输功能。最佳子结构是指从上一个阶段的一个或某些状态的每个阶段的最佳状态(最高问题问题是子问题问题的最大问题。最佳解决方案可以确定该问题的最佳解决方案)。边界是指最小值(初始范围)的解决方案,状态传递函数是指从一个阶段到另一个阶段过度的特定形式。邻域问题之间的关系(递归)

  每个子问题仅计算一次重叠的子问题,然后将计算结果保存到表中。每次您需要求解先前的子问题解决方案时,都可以调用它。开销的计划是一种使用时间空间的算法。

  确定是否可以通过动态计划来解决,首先是确定重叠是否存在问题。

  爬楼梯

  假设您正在爬楼梯。您需要n订单才能到达建筑物的顶部。

  每次您可以攀登1或2步。您需要爬到建筑物顶部的许多不同方式?

  注意:给定n是一个积极的整数。

  示例1:

  输入:2

  输出:2

  说明:有两种爬升到建筑物顶部的方法。

  1. 1订单 + 1订单

  2.步骤2

  示例2:

  输入:3

  输出:3

  说明:有三种爬升到建筑物顶部的方法。

  1. 1订单 + 1订单 +级别1

  2. 1订单 +级别2

  3.步骤 + 1级

  分析:

  假设n = 10,首先考虑最后一步,要么从第九步到第十级,要么从第八级到两个级别。因此,要达到第十步,最后一步必须从第八或第九步开始。也就是说,从地面到第八级的第八步。从地面到第十步,总共有X+Y物种。

  也就是说,f(10)= f(9)+f(8)

  在这一点上,动态计划的三个要素出现了。

  边界:F(1)= 1,F(2)= 2

  最佳结构:F(10)最好的子结构,即F(9)和F(8)

  状态传输功能:f(n)= f(n-)+f(n-2)

  类解决方案(对象):

  Def Climbstairs(Self,n):

  ”“”

  :type n:int

  :rtype:int

  ”“”

  如果n = 2:

  返回n

  a = 1#边界

  b = 2#边界

  温度= 0

  对于我的范围(3,n+1):

  温度= A+B#状态转移

  a = b#结构

  b = temp#e t b b b

  返回温度

  通过动态计划计算编辑距离。

  编辑器之间的距离是指可以在两个字符串之间转换为另一个字符串之间的编辑操作的数量。从通常的话来说,编辑距离越小,这两个文本的相似性就越大。此处的编辑操作主要包括三种类型:

  插入:将角色插入字符串中;

  删除:删除字符串中的字符;

  替换:将字符串中的字符替换为另一个字符。

  因此,如何计算与Python的距离?我们可以从更简单的情况下进行分析。

  当两个字符串都是空字符串时,编辑距离为0;

  当一个字符串为空时,编辑距离是另一个非空字符串的长度;

  当两个字符串是非空字符(长度i和j)时,可以采取以下三种情况的最小值:

  1.已知i-1和j的字符串长度的编辑距离,然后添加1个;

  2.已知i和j-1字符串长度的编辑距离,然后添加1个;

  3.已知I-1和J-1字符串字符串的编辑距离。目前,考虑了两种情况。如果I-I与J-Character不同,则可以添加1个;如果是相同的,然后,然后,然后,然后,然后就不需要添加1。

  显然,上述算法的想法是动态计划。

  找到具有m和n长度的字符串的编辑距离。首先,定义函数-edit(i,j),该函数代表字符串之间的编辑器,其第一个长度和j字符串的第二个长度j.distance.Dymanic计划表达式可以写为:

  如果i == 0和j == 0,请编辑(i,j)= 0

  如果(i == 0和j 0)或(i 0和j == 0),edit(i,j)= i + j

  如果我≥1和j≥1,请编辑(i,j)== min {edit(i-1,j) + 1,edit(i,j-1) + 1,edit(i-1,j-1)) + d(i,j)}。当第一个字符串的i -i -i字符不等于第二个字符串的j的j的j时,d(i,j)= 1;否则,d(i,j)= 0。

  DEF EDIT_DISTANCE(Word1,Word2):

  len1 = len(word1)

  len2 = len(word2)

  dp = np.zeros(((len1 + 1,len2 + 1)))

  对于我的范围(len1 + 1):

  dp [i] [0] = i

  对于J范围(LEN2 + 1):

  DP [0] [J] = J

  对于我的范围(1,len1 + 1):

  对于J范围(1,LEN2 + 1)的J:

  delta = 0如果word1 [i-1] == word2 [j-1]其他1

  dp [i] [j] = min(dp [i -1] [j -1] + delta,min(dp [i -1] [j] + 1,dp [i] [j -1] + 1)治愈

  返回DP [LEN1] [LEN2]

  edit_distance('牛奶','huaxi牛奶')

  结果:2

  假设您要爬楼梯。

  注意:给定n是一个积极的整数。

  示例1:

  输入:2

  输出:2

  说明:有两种爬升到建筑物顶部的方法。Level1 + 1订单和2级

  解决方案想法:

  实现了两种方法,但是第一种方法超过了时间限制(?确实),因为重新出版时实际上计算了两次方法。两种方法都使用动态计划思想。例如,对于攀登10个楼梯,在最后一步中只有两种攀爬阶段到第10级。两个步骤在步骤中爬上。和第8步。它仅递归分为2个步骤(2个方法)和1个顺序(一种方法)。

  代码随时间限制:

  类解决方案:

  Def Climbstairs(self,n:int) - int:

  如果n = 2:

  如果n == 2:

  解决方案

  从某些测试用例开始总是很好。从一个案例开始,看看我们是否可以找到某个法律。

  .. n = 1,1攀爬方式:[1]

  .. n = 2,2种攀岩方式:[1,1],[2]

  .. n = 3,3 3种攀登建筑物的方法:[1,2],[1,1,1],[2,1]

  .. n = 4,5种攀岩方法:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1这是给予的

  您是否注意到?请参阅n = 3,基于n = 1和n = 2的3楼梯的方法数量是3楼梯?

  爬升n = 3的两种方法首先达到n = 1,然后爬上2步,或达到n = 2,然后爬上1步。。

  这是建立的吗?是的,这也是建立的。因为我们只能在第三步中爬上一步,或者在达到第二步后以两步爬上两个步骤。2)。

  因此,关系如下:f(n)= f(n -1)+f(n -2),f(1)= 1,f(2)= 2。

  def fibonacci(n):

  如果n = 1:

  返回1

  返回fibonacci(N-1)+fibonacci(N-2)

  当然,这非常慢(O(2^n)) - 我们必须进行大量重复计算!通过迭代计算,我们可以更快:

  def fibonacci(n):

  a,b = 1,2

  对于_范围(N-1):

  a,b = b,a+b

  返回

  现在,让我们尝试总结我们学会的内容,以查看是否可以将其应用于集合X的步骤数的要求。Similar推理告诉我们,如果x = {1,3,5},那么我们算法应为f(n)= f(n -1)+f(n -3)+f(n -5)。如果n0,那么我们应该返回0,因为我们不能爬出负数。

  DEF楼梯(N,X):

  如果n 0:

  返回0

  elif n == 0:

  返回1

  x中的elif n:

  返回1+sum(x n如果x n,x的楼梯(n-x,x))

  别的:

  返回总和(x in x in x n如果x n,x n)

  这也非常慢(O(| x |^n)),因为它也可以重复计算。我们可以使用动态编程来加快加速。

  每个输入缓存[i]将包括我们可以使用集合X到达步骤I的方法数量。

  DEF楼梯(N,X):

  cache = [0 for _在范围内(n+1)]

  缓存[0] = 1

  对于我的范围(n+1):

  cache [i]+= sum(cache [i-x]对于x中的x,如果i-x 0)

  缓存[i]+= 1如果我在x else 0中0

  返回缓存[-1]

  时间复杂性为O(n*| x |),空间复杂性为O(n)。

  结论:以上是Python攀登楼梯编制的首席CTO笔记,总结了多少相关内容答案,我希望它对您有所帮助!如果您解决问题,请与更多关心此的朋友分享问题?