[PDF] Sous-Séquence maximale [cx02] - Exercice - Unisciel



Previous PDF Next PDF


























[PDF] tension alternative sinusoïdale+exercices

[PDF] exercice calcul tension alternative

[PDF] exercices tension alternative cap

[PDF] exercice tout tous toute toutes cycle 3

[PDF] exercices quelque

[PDF] transformation en chimie organique exercice

[PDF] site donneur définition

[PDF] exercices sur les triangles 6ème

[PDF] construire des triangles cm2

[PDF] evaluation sur les triangles 5eme

[PDF] séquence les triangles cm1

[PDF] triangles égaux 4ème exercices corrigés

[PDF] triangle superposable definition

[PDF] triangle isometrique secondaire 4

[PDF] cas d'isométrie des triangles démonstration

Sous-Sequence maximale [cx02] - Exercice

Karine Zampieri, Stephane Riviere

UniscielalgoprogVersion 21 mai 2018

Table des matieres

1

Enonce2

2 Algorithmique, Programmation

2

2.1 Algorithme na

f. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 Algorithme ameliore

4

2.3 Une solution recursive : diviser pour resoudre

6

2.4 Une solution en temps lineaire

9

2.5 Tests et performances

1 0

3 Preuve de l'algorithme lineaire

1 2

4 Conclusion

1 3

5 References generales

1 4 C++ - Sous-sequence maximale (Solution)Mots-ClesComplexite des algorithmes RequisAxiomatique imperative, Recursivite des actions

FichiersUtilsTB, UtilsTBOpers

Diculte• ◦ ◦(2 h)Objectif

Cet exercice etend l'etude de cas du cours @[Sous-sequence de somme maximale]. 1 Unisciel algoprog { Sous-Sequence maximale [cx02]2 1

EnonceObjectif

Soitt[1..n]un tableau d'entiers (positifs, negatifs ou nuls). Sans utiliser de tableau auxiliaire, determinezla valeur et les indicesdu sous-tableaut[g..h]donnant la somme la plus grande de tous les sous-tableaux contigus det.

2 Algorithmique, Programmation

2.1 Algorithme na

f

L'algorithme nafconsiste a :

1. Enumerer tous les couples(ix,jx)qui delimitent une partie du tableau. 2. Ca lculerl aso mmed es elementsp ourc ettep artie. 3.

Ca lculerl em aximumd et outesces so mmes.Denissez la constanteTMAX=1000(taille maximale des tableaux) et le typeTableaucomme

etant un tableau d'entiers de taille maximaleTMAX. Ecrivez une procedurexactualiserSi(vmax,somme,g,h,ix,jx)qui actualise le triplet d'entiers vmax g h )avec le triplet d'entiers de valeurs(somme,ix,jx)sisomme>vmax. Ecrivez une procedureexec_vmaxsomme1(t,n,vmax,g,h)qui, pournelements d'unTableaut , calcule la valeur de la meilleure somme dansvmax(entier) ainsi que les indices dansg (entier) et dansh(entier) du sous-tableau correspondant.Validez vos procedures avec la solution.

Solution C++@[pgvmaxsomme2.cpp]/**

Actualise

le triplet vmax g h avec somme ix jx si somme vmax @param in out vmax valeur maximale @param out g indice bas @param out h indice haut @param in somme somme @param out ix indice bas @param out jx indice haut voidxactualiserSi(int&vmax ,int&g ,int&h ,intsomme,intix,intjx){ Unisciel algoprog { Sous-Sequence maximale [cx02]3if(somme> vmax ){ vmax somme g ix h jx

Algorithme

na f du calcul de la meilleure somme @param in t un tableau d entiers @param in n nombre d l ments @param out vmax valeur maximale @param out g indice bas @param out h indice haut voidexec_vmaxsomme1(constTableau&t ,intn,int&vmax ,int&g ,int&h ){ vmax t [0]; for(intix= 0; ix < n ; ++ix){ for(intjx= 0; jx < n ; ++jx){ intsomme= 0; for(intk= ix ;k <= jx ; ++k){ somme t k xactualiserSi vmax g h somme ix jx Quelle est la complexite (en nombre de somme) deexec_vmaxsomme1pournelements?Solution simple Le nombreNde fois que l'instruction de la somme :somme<- somme + t [k] est eectuee vaut : N=n? i=1n j=ij k=i1 n? i=1n j=i(j-i+ 1) Or : n j=i(j-i+ 1) =n-i+1? j=1j 12 (n-i+ 1)(n-i+ 2) Unisciel algoprog { Sous-Sequence maximale [cx02]4

Il reste donc :

N=n? i=112 (n-i+ 1)(n-i+ 2) 12 n i=1i(i+ 1)

Comme (formule deFaulhaber) :

n i=1i2=16 (2n3+ 3n2+n)

Finalement :

N=16 (n3+αn2+βn) La complexite globale de la procedure est donc enΘ(n3).

2.2 Algorithme ameliore

Dans l'algorithme precedent, les sommes partielles sont calculees plusieurs fois : •La boucle surkevalue la somme : S j=j k=it[k] •A l'etape suivante, cette m^eme boucle evalue la somme : S j+1=j+1? k=it[k] •On en deduit la relation entreSjetSj+1: S j+1=Sj+t[j+ 1] Ecrivez une procedurexcalculerDroite(t,ideb,ifin,vmax,g,h)qui calcule vers la droite le triplet d'entiers(vmax,g,h)du sous-tableaut[ideb..ifin]d'unTableaut . Ecrivez une procedureexec_vmaxsomme2(t,n,vmax,g,h)qui calcule la valeur de la meilleure somme dansvmax(entier) ainsi que les indices dansg(entier) et dansh(entier) du sous- tableau correspondant pournelements d'unTableaut . Unisciel algoprog { Sous-Sequence maximale [cx02]5Validez vos procedures avec la solution.

Solution C++@[pgvmaxsomme2.cpp]/**

quotesdbs_dbs21.pdfusesText_27