【发布时间】:2014-04-21 00:39:57
【问题描述】:
所以在我的教科书中,有一段代码可以通过使用分治递归算法找到数组中的最大元素:
Item max(Item a[], int l, int r)
{
if (l == r) return a[1];
int m = (l+r)/2;
Item u = max(a, l, m);
Item v = max(a, m+1, r);
if (u > v) return u; else return v;
}
对于代码后面的一个问题,它要求我修改该程序,以便通过将大小为 N 的数组分成大小为 k = 2^((lgN)-1) 的一部分和大小为 @987654323 的另一部分来找到数组中的最大元素@(因此至少有一个部分的大小是 2 的幂。
所以我试图解决这个问题,但我刚刚意识到我无法在代码中做指数。我应该如何实现将一个数组分成大小k = 2^((lgN)-1)?
【问题讨论】:
-
为什么你需要分而治之来解决这个问题?这将需要与原始遗留解决方案相同的线性时间
-
“我不能在代码中做指数” - 为什么不呢?
-
我只是在这里关注问题。我对如何将其拆分为大小 k = 2^((lgN)-1) 感到困惑。我知道如何做简单的指数,例如 2^5,但 lgN-1 部分让我很困惑
-
第一次返回:
return a[1];是错误!应该是return a[l];(或等效的return a[r];)。
标签: c++ arrays algorithm recursion