【发布时间】:2016-11-29 05:20:09
【问题描述】:
我正在尝试提出一种分而治之的算法来查找数组中的最小元素,但递归代码对我来说有点费解。
例如,取如下伪代码:
procedure R_MIN (A, n)
begin
if (n = 1) then
min := A[0];
else
lmin := R_MIN (A, n/2);
rmin := R_MIN (&(A[n/2]), n - n/2);
if (lmin < rmin) then
min := lmin;
else
min := rmin;
endelse;
endelse;
return min;
end R_MIN
我的理解是我们将数组分成两半,除非我们有基本情况。然后我们找出哪一半有最小值并重复调用,进一步拆分它(现在我们有 4 个数组)。但是实际在哪里以及如何找到 min 以及这段代码在 C 中会是什么样子?在我看来,这只有在我们分成对时才有效。
【问题讨论】:
-
你应该尝试写C版本,然后我们会看到。
-
这个伪代码与 Pascal 惊人的相似:)