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