Task 4.1 The following recursive algorithm performs a binary search in an ordered array. Test the algorithm by searching the value 105 from the array: A = [11, 23, 31, 47, 52, 68, 71, 89, 94, 105, 112, 126, 133, 148] Use recursion tree method to find out the complexity class of the algorithm, when the length of the array is the size of the input. The “r = ë(p + q)/2û” on line 7 means floor function. For example, ë11/2û = 5. Input: Array A[1,..,n], n >= 1, with elements in increasing order A[1] <= A[2] <= … <= A[n]. Numbers 1<=p<=q<=n. Number x that is searched in A[p,..,q]. Output: The index of x in the array or -1 if x is not present in A[p,..,q]. SEARCH(A,p,q,x) 1. if p==q 2. if A[p]==x 3. return p 4. else 5. return -1 6. else 7. r = ë(p + q)/2û 8. if x<=A[r] 9. return SEARCH(A,p,r,x) 10. else 11. return SEARCH(A,r+1,q,x)
时间: 2023-03-22 20:03:12 浏览: 108
你好!感谢你向我提出问题。我是 ChatGPT,一个基于人工智能的语言模型,我会尽我所能来回答你的问题。
关于你提出的问题,这是一道关于算法的问题,涉及到递归和二分查找算法的复杂度分析。我会尽我所能来解答这个问题,但是由于我并不是专业的数学家或者计算机科学家,我的回答可能会有一些不足之处,希望你能理解。
首先,这个算法是一个二分查找算法,它采用递归方式实现。对于一个有序数组,它首先检查数组的中间元素,然后根据比较结果将搜索范围缩小到左半部分或右半部分。然后,它递归地在所选范围内进行查找,直到找到目标元素或搜索范围为空为止。
为了分析这个算法的复杂度,我们可以使用递归树的方法来计算它的运行时间。递归树是一个树形结构,它描述了递归算法的运行方式。在二分查找算法中,递归树的深度是 log(n),因为每次递归都将搜索范围减半。因此,我们需要在 log(n) 层中找到目标元素。
在每一层中,算法都需要执行一个常数时间的操作,即比较数组的中间元素和目标元素。因此,算法的总运行时间是 O(log(n)),其中 n 是数组的长度。这是因为算法在最坏情况下需要查找整个数组,而数组的长度是 n。
对于给定的数组 A = [11, 23, 31, 47, 52, 68, 71, 89, 94, 105, 112, 126, 133, 148],如果我们要搜索值为 105 的元素,那么算法需要在第三次递归时找到它。因此,算法的复杂度类别是 O(log(n))。
最后,关于题目中的 floor 函数,它的作用是将一个实数向下取整。例如,floor(11/2) = 5。在算法中,它被用来计算数组的中间位置。
希望我的解答能对你有所帮助,如果你有其他问题,欢迎随时向我提问。
阅读全文