问题描述:给定一个数组,使用分治算法找到数组中的最大值。
算法思路:
-
把数组分成两个子数组,分别求解两个子数组的最大值。
-
比较两个子数组的最大值,取较大值作为当前数组的最大值。
-
当子数组只有一个元素时,该元素就是子数组的最大值。
Python 代码示例:
python
def find_max(arr):
if len(arr) == 1:
return arr[0]
mid = len(arr) // 2
left_max = find_max(arr[:mid])
right_max = find_max(arr[mid:])
return max(left_max, right_max)
arr = [3, 8, 2, 9, 5]
print(find_max(arr))
求解过程:
-
初始数组
arr = [3, 8, 2, 9, 5],长度为 5,mid = 5 // 2 = 2。 -
递归调用
find_max(arr[:2]),即求子数组[3, 8]的最大值。- 对于子数组
[3, 8],mid = 2 // 2 = 1。 - 递归调用
find_max([3]),因为长度为 1,返回 3。 - 递归调用
find_max([8]),因为长度为 1,返回 8。 - 比较 3 和 8,返回 8。
- 对于子数组
-
递归调用
find_max(arr[2:]),即求子数组[2, 9, 5]的最大值。- 对于子数组
[2, 9, 5],mid = 3 // 2 = 1。 - 递归调用
find_max([2]),因为长度为 1,返回 2。 - 递归调用
find_max([9, 5]),mid = 2 // 2 = 1。 - 递归调用
find_max([9]),因为长度为 1,返回 9。 - 递归调用
find_max([5]),因为长度为 1,返回 5。 - 比较 9 和 5,返回 9。
- 比较 2 和 9,返回 9。
- 对于子数组
-
比较 8 和 9,返回 9,所以数组
[3, 8, 2, 9, 5]的最大值是 9。