Académique Documents
Professionnel Documents
Culture Documents
X1+x2=S1
S1+X3=S2
S2+x4=s3
S2+x5=s4
AGORITHME 2
VARIABLES
max , sub_sequence_len , sub_sequence_len , prev_sum : INTEGER;
FSI
DEBUT
FINPOUR
max <- arr[0]
FINPOUR
sub_sequence_si <- 0
sub_sequence_len <- 1
ECRIRE max , sub_sequence_si ,
sub_sequence_si + sub_sequence_len - 1
POUR si <- 0 À arr.length - 1 FAIRE
FIN
prev_sum <- 0
sum <- 0
sum <- prev_sum + arr[si + len - 1]
prev_sum <- sum
Calculer la somme maximale de tout Calculer la somme maximale de tout Calculer la somme maximale de tout
sous sequence sous sequence sous sequence
Choisissez le plus grand somme Choisissez le plus grand somme Choisissez le plus grand somme
ECRIRE(lss.max);
ECRIRE(lss.start_index);
ECRIRE(lss.end_index);
FIN
ALGORITHME 3
int main(int argc, char *argv[]) // o(n²)
result r = {r_max + l_max,
{
l_max_start_index, r_max_end_index +
left_s};
algo3();
return r;
}
return 0;
}
void algo3()
{
// get current time
int arr_s = sizeof(arr) / sizeof(arr[0]);
}
ALGORITHME 4
Après avoir résolu les trois algorithmes précédents, nous
avons obtenu une somme totale. Dans cet algorithme,
nous allons comparer chaque valeur avec cette somme, et
à la fin, la valeur égale reste.
Max : 11 | SI : 2 & EI : 3
ALGORITHME 4
x1 x2 x3 x4 x5 x6
getLargestSum Max : 11
SI : 2 & EI : 3
Is the len = 1
x1 x2 x3 x4 x5
getLargestSum
Is the len = 1
Max : arr[0] = 1
… SI : 0 & EI : 0
x1
getLargestSum
Is the len = 1
ALGORITHME 4
structure Donnees { // get the largest sum of the new lss.max <- sum;
max : ENTIER; array lss.start_index <-
start_index : ENTIER; lss <- getLargestSum2(arr,arr_len - arr_len - 1 - s;
end_index : ENTIER; 1); lss.end_index <- arr_len
} - 1;
// calculate the sum of elements in FINSI
fonction getLargestSum2(arr : ENTIER[], the array starting from the last FINPOUR
arr_len : ENTIER) : Donnees element
DEBUT POUR s <- 1 A arr_len - 1 - retourner lss;
SI (arr_len == 1) ALORS lss.start_index + 1 FAIRE
max <- arr[0]; // sum FINFONCTION
start_index <- 0; sum <- 0;
end_index <- 0; POUR i <- arr_len - 1 A arr_len - 1 // test
retourner {max, start_index, end_index}; - s - 1 PAR -1 FAIRE VARIABLES
FINSI sum <- sum + arr[i]; arr : ENTIER[5];
FINPOUR arr_len : ENTIER;
// create a new array without the last lss : Donnees;
element // compare the last max value DEBUT
// let arr2 = arr.slice(0, arr_len - 1); with sum of the current sub-sequence
SI (sum > lss.max) ALORS arr[0] <- 1;
ALGORITHME 4
DEBUT
arr[0] <- 1;
arr[1] <- 2;
arr[2] <- 3;
arr[3] <- 4;
arr[4] <- 5;
arr_len <- 5;
ECRIRE(lss.max);
ECRIRE(lss.start_index);
ECRIRE(lss.end_index);
FIN
for (int s = 0; s < a_s; s++) // o(n)
int max = a[a_s - 1]; {
ALGORITHME 4 int maxStart = a_s - 1; int sum = 0;
for (int j = a_s - 1; j >= a_s - 1 - s;
int maxEnd = a_s - 1;
for (int s = 0; s < a_s; s++) // o(n) j--) // o(n)
{ {
int sum = 0; sum += a[j];
} for (int j = a_s - 1; j >= a_s - 1 - s; }
return r; j--) // o(n) if (sum > max)
result r = {a[0], 0, 0}; { {
{ sum += a[j]; max = sum;
if (a_s == 1) } maxStart = a_s - 1 - s;
if (sum > max) maxEnd = a_s - 1;
* n ) = o(n³) { }
result getLargestSum2(int a[], int a_s){ // o(n² max = sum; }
maxStart = a_s - 1 - s;
} result; maxEnd = a_s - 1; // remove the last element from
int end_index; } the array
int start_index; } int last = a[a_s - 1];
int max; a_s--;
{ // remove the last element from the
typedef struct array
int last = a[a_s - 1];
23, 84}; a_s--;
ALGORITHME 4
// previous max subarray sum
result prevMax = getLargestSum2(a,
a_s); // o(n)
void algo4(){
int arr_s = sizeof(arr) / sizeof(arr[0]);