動的計画法の一例として、異なる時間の複雑さを理解するために、

パブリック クラスメイン{
     公共の 静的な 無効メイン(文字列[] args)を{
     // ここにコードを記述する
        int型 N = 10000 ;
        INT [] A = 新た INT [N]。
        以下のためにint型 i = 0; iがNを<; iは++ ){ 
            [I] =(INT)(Math.random()* N + 1 )。
        } 
        長いのstartTime = System.nanoTimeの()。
        INT RES = MaxSubsequenceSum_4(A、N)。
        長い endTimeは= System.nanoTimeの()。
        System.out.println(RES)。
        System.out.println( {) "程序运行时间: "+(endTimeは-のstartTime)+" NS" ); 

    } 

    // アルゴリズム1 O(N ^ 3)
    公共の 静的 INT MaxSubsequenceSum_1(最終 INT A []、int型のN){
         int型 ThisSum、MaxSum = 0 以下のためにint型 i = 0; iがNを<; iは++ ){
             ためのint型 J = I; J <N; J ++ ){ 
                ThisSum = 0 以下のためのint型のk = I; K <= J; kは++ 
                    ThisSum + = A [K]。
                } 
                の場合(ThisSum> ){ = ThisSum。
                } 
            } 
        } 
        に戻ります
    } 
//     Algorithm2 O(N ^ 2)
    パブリック 静的 最終int型 MaxSubsequenceSum_2(INT []、int型のn){
         int型 ThisSum = 0 以下のためにint型 i = 0; iが++; iがNを< ){
             ためINT J =; J <N; J ++ ){
                ThisSum = A [J]。
                もし(ThisSum> ){ = ThisSum。
                } 
            } 
        } 
        に戻ります
    } 
// Algorithm4 O(N)
    パブリック 静的 最終int型 MaxSubsequenceSum_4(INT []、int型のn){
         int型 ThisSum = 0、= 0 ;
        INT J = 0であり、j <N; iが++ ){ 
            ThisSum + = [J]。
            もし(ThisSum> ){ = ThisSum。
            } 
            そうで あれば(ThisSum <0 ){ 
                ThisSum = 0 
            } 
        } 
        を返します
    } 
}

 

おすすめ

転載: www.cnblogs.com/zhaijiayu/p/11563281.html