분할 및 정복 - 연습

1 재귀 적 방법의 배열에서 최대 요소 찾기 :

#INCLUDE <STDIO.H>
 INT MAX ( int로 A, INT의 B)을 {
     경우 (A> B)가
     반환 단계;
    다른  
    반환 B; 
} 
INT FMAX ( INT [η], int로 Ⅰ) {
     경우 (I == 1 )
     복귀 A [ 0 ];
    다른 
     MAX (FMAX (a, I- 1 )와, [I- 1 ]); 
} 
INT 의 main () {
     int로 [η] = { 1 , 32 , 34 , 56, 12 };
    INT maxNum = FMAX (a, 5 ); 
    의 printf ( " %의 D " , maxNum); 
}

테스트 결과 :

 

 재귀 적 관점에서 (1) :

 

 문제의 각 재귀 시간 스케일은 재귀 재귀 수출 될 때까지 1 씩 감소.

파티션 분석 방법의 관점에서 (2) :

FMAX는 (a는 [] 난에서 INT INT) 문제 침입입니다 FMAX를 (a, I-1) 및 [I-1], 문제의 시간 스케일 직접 해결 호출 될 수 MAX 함수로 감소 될 때까지.

 

도 2에서, X = A + BI 및 Y = C + 디 개의 복소수가 제공된다. XY = (AC-BD) + (광고 + BC) 내가 설계, 알고리즘은 세 개의 곱셈을 해결하기 : XY 복잡한 제품은 네 개의 곱셈, 즉를 완료 할 수 있습니다

 

 = I 인덱스 I,되도록 [I]이있는 경우 (3)는, 재귀 적으로 순차적으로 배열에 저장된 서로 다른 정수 n을 구비한다. 이 인덱스를 찾기위한 알고리즘 O (log2n) 시간을 디자인합니다.

void position(int a[],int l,int r){
    int mid;
    while(l<r){
        mid=(l+r)/2;
        if(a[mid]==mid)
        return mid;
        if(a[mid]<mid)
        l=mid+1;
        if(a[mid]>mid)
        r=mid-1;
    }
    rerurn -1;//未找到元素 
}

추천

출처www.cnblogs.com/zhai1997/p/12078174.html