分割統治 - 演習

図1に示すように、再帰的な方法の配列における最大の要素を見つけます。

する#include <stdio.hの>
 INT MAX(int型 A、int型B){
     場合(> b)に
     戻ります他の 
    リターンB;
}
INT FMAX(INT A []、int型のI){
     場合(I == 1 を返す [ 0 ]。
    
    リターン MAX(FMAX(I- 1)、[I- 1 ])。
}
INT のmain(){
     int型 [] = { 132345612 }。
    INT MAXNUM = FMAX(5 )。
    printf(" %dの" 、MAXNUM)。
}

テスト結果:

 

 再帰の観点から(1):

 

 問題の各再帰的時間スケールは、再帰再帰輸出まで1減少しました。

パーティション分析方法の観点から、(2):

FMAX(I int型、] [INT)問題を破壊することである:FMAX(I-1)および[I-1]、問題の時間スケールは、MAX関数に減少するまで、直接解くと呼ぶことができます。

 

図2に示すように、2つの複素数X = A + BiおよびY = C +ジが設けられています。XY複雑な製品、すなわち、4回の乗算を完了するために使用することができる:XY =(AC-BD)+(AD + BC)私は、3つだけ乗算を解決するために設計されたアルゴリズム

 

 = iのインデックスi、ように[i]が存在する場合、図3に示すように、再帰的に順次配列に格納された、互いに異なる整数Nが設けられています。このインデックスを見つけるために、O(log2n)時間でアルゴリズムを設計します。

ボイド位置は(int型 []、INT L、int型r)を{
     INT ミッド。
    一方、(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