Algorithm 递归算法的时间使用

Algorithm 递归算法的时间使用,algorithm,Algorithm,我和我的朋友讨论了以下算法问题 "Describe a recursive algorithm for finding the maximum element in an array A of n elements. What is your running time and space usage?" 我们的结论是,它有准时使用。根据该语句,Fn=将A[n]与Fn-1进行比较,在递归的基本情况下,它将A[0]与A[1]进行比较,然后返回更大的一个,它将与A[2]进行比较。随着

我和我的朋友讨论了以下算法问题

"Describe a recursive algorithm for finding the maximum element in an array A of n        
elements. What is your running time and space usage?"
我们的结论是,它有准时使用。根据该语句,Fn=将A[n]与Fn-1进行比较,在递归的基本情况下,它将A[0]与A[1]进行比较,然后返回更大的一个,它将与A[2]进行比较。随着递归的进行,最终它将返回数组中的最大元素

每n次递归,它只比较一次,所以最后我们猜测它有时间使用。
我的问题是,我们不确定我们的解决方案,所以我们想了解关于这个算法和我们的解决方案的任何其他评论。多谢各位

是的。你是对的,这是事实。你能做的很简单就是

算法的基本操作是比较。在递归的步骤中,比较只进行一次

所以你可以说

m(n) = m(n-1) + 1
m(n-1) = m(n-2) + 1 + 1
m(n-2) = m(n-3) + 2 + 1
我们得到的结论是

m(n-i) = m(n-1-i) + i + 1
现在在您的basecase中,您将不进行任何比较basecase没有剩余元素,因此您将返回当前最大值。你可以这样写

m(0) = 1
现在代入递推方程得到基本情况,让i=n-1

我们得到

m(n) = m(0) + n - 1 + 1
但是m0=0

所以我们得到了

m(n) = n

因此,您的算法已启用。还有其他方法可以证明这一点。即使没有数学证明,你也可以从逻辑上说你的算法是开的,因为它在每个递归步骤中只执行一个基本操作,而且无论输入是什么,算法都会递归n个步骤。

如果数组包含整数,你就可以找到时间复杂度。对于数字,比较两个数字可视为一个单元操作。在对数组进行迭代时,为了找到最大值,该操作被执行n次。因此,


但是,如果数组包含复杂的数据类型,比如字符串,那么比较两个字符串不能被视为一个单元操作。要比较字符串,您可能必须迭代字符串的每个字符。在这种情况下,算法的时间复杂度也可能取决于数组中字符串的长度。与其他数据类型类似,比较两个对象可能不是一个单元操作。但在您的情况下,数组似乎包含数字,因此您的结果很好。

谢谢您的回答:谢谢您的回答: