Python 为什么要添加+;1在溶液中
我正在浏览一些算法帖子。在回顾时,我怀疑为什么我们在返回最终解决方案时在下面的代码中添加了1Python 为什么要添加+;1在溶液中,python,algorithm,dynamic-programming,insertion-sort,Python,Algorithm,Dynamic Programming,Insertion Sort,我正在浏览一些算法帖子。在回顾时,我怀疑为什么我们在返回最终解决方案时在下面的代码中添加了1 import sys # Recursive function to find minimum # number of insertions def findMinInsertions(str, l, h): # Base Cases if (l > h): return sys.maxsize if (l == h):
import sys
# Recursive function to find minimum
# number of insertions
def findMinInsertions(str, l, h):
# Base Cases
if (l > h):
return sys.maxsize
if (l == h):
return 0
if (l == h - 1):
return 0 if(str[l] == str[h]) else 1
# Check if the first and last characters are
# same. On the basis of the comparison result,
# decide which subrpoblem(s) to call
if(str[l] == str[h]):
return findMinInsertions(str, l + 1, h - 1)
else:
**return (min(findMinInsertions(str, l, h - 1),
findMinInsertions(str, l + 1, h)) + 1)**
# Driver Code
if __name__ == "__main__":
str = "abc"
print(findMinInsertions(str, 0, len(str) - 1))
+我过去常数数。我们需要在返回父节点时添加(从0{return 0}+1开始)。 然后取两个递归调用的最小值
findMinInsertions(str, l, h - 1)
插入最后一个字符后的最小插入次数
findMinInsertions(str, l + 1, h)
min(findMinInsertions(str, l, h - 1), findMinInsertions(str, l + 1, h)) # (a)
插入第一个字符后的最小插入次数
findMinInsertions(str, l + 1, h)
min(findMinInsertions(str, l, h - 1), findMinInsertions(str, l + 1, h)) # (a)
插入第一个字符或最后一个字符后的最小插入次数。要获得最小插入次数,您可以在插入一个字符后获取最小插入次数(a),然后添加一个插入(因为已经插入了一个字符).该算法在插入排序期间没有找到最小插入次数,只是给出了插入次数的上限。通过简单地在字符串“abc”上运行算法,很容易检查这一点,结果是2,而实际的最小插入数是0 让我们看一下递归步骤:
if(str[l] == str[h]):
return findMinInsertions(str, l + 1, h - 1)
else:
return (min(findMinInsertions(str, l, h - 1),
findMinInsertions(str, l + 1, h)) + 1)
如果str[l]==str[h],插入的最小数量由它们之间的字符值给出,因为str[l]和str[h]可以停留在它们的相对位置(意味着str[h]将停留在str[l]的右侧),因此我们将只在索引l和h之间移动/插入字符
一旦你意识到在平等的情况下会发生什么,你就可以理解在不平等的情况下有一个机会移动其中一个字符str[l]或str[h]
请注意由于这只是移动字符的一个机会,因此该算法会产生插入次数的上限,而不是最小值。参数
l
和h
似乎是字符串str
的索引。你需要添加1
才能进入下一个角色。我已经编辑了帖子,请再次检查@Someprogrammerdude。为什么我们在return语句return(min(findmininstertions(str,l,h-1),findmininstertions(str,l+1,h))+1)的末尾添加1这个程序在我看来好像添加了1,因为递归的当前执行应该计为1。就像str[l]!=str[h],在将当前问题简化为子问题之前,需要完成一个计算为1的操作。此算法用于查找字符串中插入的最小次数,使其成为回文。当从递归返回最小值时,它将计算我们拥有的最小元组数。那么为什么需要在答案中加1呢?这个算法不是用于插入排序的。实际上,这个算法计算了使字符串具有回文性所需的最小插入次数。@ParulGarg您应该在问题中提到算法的用途。