| »ç·Ê 1 | »ç·Ê 2 | »ç·Ê 3 | ÀϹݱÔÄ¢ |

¼±Çü O(N) ¾Ë°í¸®Áò (»ç·Ê 2)

¡á ÃÖ´ë ºÎºÐÇÕ ¾Ë°í¸®Áò

 

-------------------------------------------------------------
 int MaxSubsequenceSum( const int A[ ], int N )
       {      int ThisSum, MaxSum, j;
              ThisSum = MaxSum = 0;
               for( j = 0; j < n; j++ )
 ¨ç                 {     ThisSum += A[ j ];
 ¨è                        if( ThisSum > MaxSum ) MaxSum = ThisSum;
 ¨é                        else if( ThisSum < 0 )    ThisSum = 0;
                       }
 ¨ê          return MaxSum;
       }
------------------------------------------------------------- 

  

       <trace>

    A[]

=

4

-3

5

-2

-1

2

6

-12

2

 

 j 

=

0

1

2

3

4

 5

6

7

8

 

ThisSum

=

4

1

6

4

3

5

11

0

2

ÇöÀç ºÎºÐÇÕ

MaxSum

=

4

4

6

6

6

6

11

11

11

ÃÖ´ë ºÎºÐÇÕ

¨ç ÁýÇÕÀÇ Ã¹ ¹ø° Á¤¼ö¸¦ ThisSum°ú ´õÇÑ´Ù.
¨è ThisSum°ú MaxSumÀ» ºñ±³ÇÑ´Ù. ¸¸ÀÏ ThisSumÀÌ Å©¸é, ÀÌ Á¤¼ö¸¦ ÃÖ´ëºÎºÐÇÕ MaxSumÀ¸·Î
    ³õ´Â´Ù. ±×·¸Áö ¾Ê´Ù¸é MaxSumÀº ±âÁ¸ °ªÀ» ±×´ë·Î À¯ÁöÇÑ´Ù.
¨é ThisSumÀÌ 0º¸´Ù ÀÛÀºÁö ºñ±³Çؼ­ ¸¸ÀÏ 0º¸´Ù ÀÛ´Ù¸é °ªÀ» 0À¸·Î ³õ´Â´Ù. ÃÖ´ë ºÎºÐÇÕÀ» °è»êÇÏ±â     À§ÇÔÀÌ´Ù.
    ÁýÇÕÀÇ ³ª¸ÓÁö Á¤¼öµéµµ À§ ¨ç,¨è,¨é°úÁ¤À» µÇÇ®ÀÌÇÑ´Ù.
¨ê ´õ ÀÌ»ó Á¤¼ö°¡ ¾øÀ» ¶§¿¡ for¹®À» ¸ØÃß°í ÃÖ´ë ºÎºÐÇÕ MaxSumÀ» ¹ÝȯÇÑ´Ù.