【发布时间】:2021-03-12 08:04:51
【问题描述】:
我一直试图围绕递归关系的概念展开思考,并了解如何划分、征服和组合。我不明白的是如何从处理一组值、最低索引和最高索引的多参数函数中导出正确的递归关系。
更多上下文: 我的基本情况是最低索引等于最高索引。当满足该条件时,我从最低索引返回元素。 (也是最高的)它是唯一的元素。
我的递归情况是当 q 和 p 不相等时。下面是代码:
int maximum(int[] A, int p, int q) {
if (p == q) {
return A[p];
}
int k, l, max1, max2, max3;
k = p + Math.floor((q-p+2)/3);
l = k + Math.floor((q-p+2)/3);
max1 = maximum(A, p, k-1);
max2 = maximum(A, k, l-1);
max3 = maximum(A, l, q);
if (max1 >= max2 && max1 >= max3) {
return max1;
} else if (max2 >= max1 && max2 >= max3) {
return max2;
} else {
return max3;
}
}
我不确定我会怎么做。从我看到的每个示例中,我应该使用 n 作为我的输入大小,我关心的唯一参数是我的输入大小。
有人能解释解决几乎所有算法的最佳方法吗?我觉得这种特殊的类型越来越吸引我,因为我习惯于在递归关系背后的解释中看到更简单的递归函数。
【问题讨论】:
-
您能解释一下您要实现的算法吗?
-
是的,这只是一个示例,而且写得不好。此函数将数组、最低和最高索引作为参数。它找到数组的各个子集的最大值。然后比较它找到的三个最大值,并确定三个最大值中的最大值。
-
你的意思是算法通过分治策略在数组中搜索最大值?
-
是的,简单地说。
标签: java recursion discrete-mathematics recurrence