2014-12-03 4 views
-1

이 의사 코드가 배열의 최소값과 최대 값을 재귀 적으로 적절하게 찾으면 알고 싶습니다.반복적으로 배열 의사 코드에서 최대 및 최소를 찾습니다

MinMax(A, max, min) 
if (|A| == 1) 
    if (max < A[1]) 
     max = A[1] 
    if (min > A[1]) 
     min = A[1] 
    return A 
Aleft = MinMax(l, max, min) 
Aright = MinMax(r, max, min) 
Aall = Merge(Aleft, Aright) 
return min,max 

괜찮습니까?

+1

재귀 호출의 인수 개수가 첫 번째 줄의 서명과 일치하지 않습니다. – Codor

+0

가장 단순하지만 (실제로 위험한) 선형 재귀입니다. 배열의 최소 항목은 배열의 첫 번째 항목이거나 나머지 부분의 최소 항목입니다 (마지막 항목을 대신 사용할 수도 있습니다. 첫번째). 최대 항목과 유사합니다. – CiaPan

답변

1

아니요. 괜찮습니다.

l 및 r은 사용되지만, 정의되지는 않는다. 두 개의 반품이 다릅니다 병합은 무엇입니까?

은 아마 당신은

MinMax(A, max, min) 
    if (|A| == 1) 
     if (max < A[1]) 
      max = A[1] 
     if (min > A[1]) 
      min = A[1] 
     return (min,max) 
    mid=|A|/2 
    l=A[:mib-1] 
    r=A[mid:] 
    (min,max) = MinMax(l, max, min) 
    (min,max) = MinMax(r, max, min) 
    return (min,max) 

을 의미하지만, 병합 사업은 당신이 multithreadable 솔루션을 찾고 될 수 있습니다 제안합니다.

MinMax(A, max, min) 
    if (|A| == 1) 
     if (max < A[1]) 
      max = A[1] 
     if (min > A[1]) 
      min = A[1] 
     return (min,max) 
    mid=|A|/2 
    l=A[:mib-1] 
    r=A[mid:] 
    (lmin,lmax) = MinMax(l, max, min) 
    (rmin,rmax) = MinMax(r, max, min) 
    if lmin < rmin 
     rmin=lmin 
    if lmax > rmax 
     rmax=lmax 
    return (rmin,rmax)