Lycée Victor Hugo IPT 2eannée 2016-17
Lesalgorithmesàconnaitre
Informatiquepourtous
Deuxièmeannée
2016-2017
Utilisation du polycopié : l’objectif de ce polycopié est de vérifier que vous
maitrisez les algorithmes au programme. Attention : ce n’est pas tout le cours
d’informatique. Munissez-vous d’une feuille et d’un sytlo puis commencez par lire
la table des matières. Pour chaque algorithme :
– Donnez-en une description succinte en français. Forcez-vous à l’écrire en toute
lettre.
– Traduisez ce qui vous avez écrit en langage Python.
– Donnez une estimation de la complexité de l’algorithme.
Si vous butez sur une de ces étapes, alors seulement, vous irez lire la partie cor-
respondante.
Table des matières
I Recherches et calculs dans une liste 2
1 Recherched’unélémentdansuneliste. . . . . . . . . . . . . . . . . . 2
2 Rechercheduminimumdansuneliste . . . . . . . . . . . . . . . . . . 2
3 Calculdelavaleurmoyenneetdelavarianced’uneliste . . . . . . 2
4 Recherchedichotomiquedansunelistetriée . . . . . . . . . . . . . . 3
5 Recherchedemotifsdansunechaînedecaractères . . . . . . . . . . 4
II Pivot de Gauss 4
1 Échelonnementdusystème. . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Réductiondusystème............................ 5
3 Implémentation................................ 6
III Recherche des zéros d’une application 8
1 Dichotomie.................................. 8
2 MéthodedeNewton............................. 9
IV Intégration numérique 10
1 Méthodedesrectangles.......................... 10
2 Méthodedestrapèzes............................ 10
V Résolution d’équation différentielle 10
1 Équationdifférentielled’ordre1. . . . . . . . . . . . . . . . . . . . . . 10
2 Équationsdifférentiellesd’ordre2. . . . . . . . . . . . . . . . . . . . . 11
VI Algorithmes de tris 12
1 Letriparinsertion.............................. 12
2 Letrifusion.................................. 12
3 Letriquicksort(outrirapide) . . . . . . . . . . . . . . . . . . . . . . . 13
1
Lycée Victor Hugo IPT 2eannée 2016-17
I Recherches et calculs dans une liste
1 Recherche d’un élément dans une liste
SoitLunelisted’éléments:chaqueélémentdeLpeutêtreaccédéparsonindice
i∈J0,n−1K.Ainsi:L[i] représentel’élémentd’indicei.Onveutsavoirsiunobjet
xestélémentdeL.Pourcela,onpeutparcourirtoutelalisteettestersil’élément
d’indiceiestégalàx.Cettealgorithmepossèdeunecomplexitétemporellelinéaire.
VoiciunexempledefonctionquirenvoieTrue ouFalse selonquexappartientou
nonàL.OnsupposequeLcontientaumoins1élément.
def ap par ti ent _i nit (a , liste ):
" fonctio n bool é enne testant si un élé ment x est dans
une liste L donn é e"
res = False
for jj in ra nge (len ( liste )):
if list e [ jj ] == a :
res = True
return res
Uneversionrécursive(decomplexitélinéaire)seraitlasuivante:
def appartient_rec(x,L):
" fonctio n bool é enne r é cursive testant si un élé
ment x est dans une liste L donn ée "
n = len(l)
if n == 0:
return False # x n ’ est pas dans la liste
Vide
else:
return x == L [0] or a pp ar ti en t_i ni t ( x ,L [1 :] )
Remarque : Lafonctionin dePythonpermetégalementdesavoirsiélément
appartientàuneliste:
def appartient_bis(x,L):
return(x in L)
Néanmoins,sidansunsujetdeconcoursdeonvousdemanderdecoderlare-
cherched’unélémentdansunelistecen’estsansdoutepascetteméthodequiest
attendue.
Script 1 H
Programmer deux fonctions (itératives et récursives) recherche_occurence
(x,L) et recherche_occurence_rec(x,L) qui renvoient le nombre d’occu-
rences de la valeur xdans une liste L.
2 Recherche du minimum dans une liste
OnsupposequelesélémentsdelalisteLobéissentàunerelationd’ordretotal.
Pourtrouverlepluspetitélément,l’idéeestdecréerunevariablemin_potentiel
correspondantpotentiellementauminimumetvalantinitalementL[0].Puis,on
parcourtlalisteetonmodifiemin_potentiel àchaquefoisqu’ontrouveunélément
quiluiestpluspetit.Voiciunexempledefonctionquirenvoielepluspetitélément
d’unelisteainsiquesonindice.OnsupposequeLcontientaumoins1élément.
def minimum (L) :
min_pot = L [0]
ind_pot = 0
for iin r ange (len(L)) :
if L [i] < min_pot : # on trouv é un élé ment
plus petit que le minimum potent iel
min_pot = L [i]
ind_pot = i
return( min_pot , in d_pot )
Script 2 H
Programmer une fonction récursive max_rec(L) qui renvoie le maximum
d’une liste et son indice.
3 Calcul de la valeur moyenne et de la variance d’une liste
Rappels : OnconsidèreunelistedeNréelsx1, x2,..., xNlavaleurmoyennem
etlavariancesontdéfiniespar:
2
Lycée Victor Hugo IPT 2eannée 2016-17
m=1
N
N
X
i=1xiet V=1
N
N
X
i=1(xi−m)2
Endéveloppantleterme(xi−m)2,onmontrequeV=1
NPN
i=1xi2−m.
Voiciunefaçondecalculerlamoyenne(fonctionmoyenne(L))etlavariance(
fonctionvariance(L))d’unelisteLdonnéeenargument.
def moyenne (x) :
somme =0
for iin x :
somme += i
return somme / len(x)
def variance (x ):
xmoy = moyenn e (x )
ecartcarr e =[]
for iin x :
ecartcarr e . append ((i- xmoy ) **2)
return moyenne ( ecartcarr e )
Remarque :le modulenumpy possèdedesfonctionsmean et var calculantla
moyenneetlavariance.
Script 3 H
Programmer une fonction kurtosis(L) qui renvoie le kurtosis de L, défini
par K=1
N
N
X
i=1xi−m
√V4
4 Recherche dichotomique dans une liste triée
SoitLunelistedenombrestriésparordrecroissant.Onveutsavoirsiunnombre
xappartientàcettelisteenutilisantleprincippededichotomiesuivant,ennotant
L[debut,fin] lasous-listedeLcommençantàl’indicedebut etfin :
– Oncalculem=E(debut +fin
2),lemilieudelasous-liste.
– Six=L[m]onatrouvéx
– Sinon,six < L[m]alorsilfautchercherxentredebut etm.
– Sinon,six > L[m]alorsilfautchercherxentremetfin.
– Onitèreceprocessusjusqu’àcequedebut =fin
Lacomplexitéd’untelalgorithmeestlogarithmique.Unepossibilitédecodeitératif
estlesuivant:
def re cherche_d icho_it (L ,p, q x) :
’’ ’ R ech er ch e par di ch ot om ie d ans la li st e tr i ée L , l
’é lé ment x entre les indices p et q. ’’’
min = p
max = q
whi le min <= max :
m=(min +max) //2
if x == L [m] :
return True
elif x < L [ m] :
max = m -1
else :
min = m +1
return False
Unepossibilitédecoderécursifestlesuivant:
def ap pa rti en t (x , L ):
" fonctio n bool é enne ef ficace testant si un élé
ment est dans une liste tri é e par ordre
croissa nt donn é e"
n = len (L)
if n == 0:
return False # a n ’ est pas dans la liste
Vide
elif n == 1:
return x == l [0] # si la liste n ’a qu ’un élé
ment , on teste si a est cet élé ment
else:
m=n //2
3
Lycée Victor Hugo IPT 2eannée 2016-17
if x == l[ m ]:
return True
elif a < l [m ]:
return ap pa rti en t (a , l [: m ])
else:
return ap pa rti en t (a , l [m +1 :] )
5 Recherche de motifs dans une chaîne de caractères
Soitdeuxchaînesdecaractères:texte detaillenetmotif detaillep<n.On
veutsavoirsimotif apparaîtdanstexte.Lefaçon«naïve»delefaireconsisteà
faireglisserlemotif lelongdetexte etdevérifiers’ilyacoïncidencecaractère
par caractère. Par exemple, on cherche si aime est dans la phrase LVH aime
Python.
Première itération :
indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
texte L V H a i m e P y t h o n
motif a i m e
Leadeaime n’estpaségalauLdeLVH.Ondécalelemotifd’uncranàdroite.
Cinquième itération :
indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
texte L V H a i m e P y t h o n
motif a i m e
Toutesleslettresa, i, m etecoïncident,onatrouvélemotif dansletexte.Cette
algorithmepossèdeunecompléxitélinéaireenn+p.
VoiciunefaçondetraduirecetalgorithmeenlangagePython.
def re che rc he ( texte , motif ) :
n = len( texte )
p = len( motif )
res = False
for iin r ange ( n -p +1) :
j=0
whi le ( j < p ) and ( texte [i+j ] == motif [j]
) :
j += 1
if j == p :
res = True
return Res
Script 4 H
Modifier cette algorithme pour compter le nombre d’occurence d’un mot dans
un texte.
II Pivot de Gauss
Laméthode dupivotde Gausspermet derésoudreunsystème linéaireden
équationsetninconnues.
Unsystème linéaire denéquationsàninconnuess’écritsouslaformesuivante:
(S):
a1,1x1+··· +a1,n xn=b1
···
an,1x1+··· +an,n xn=bn
Avec,∀(i,j)∈J1,nK:
–ai,j :lescoefficientsdusystème(S),
–xi:lesinconnuesdusystème(S),
–bj:lessecondsmembresdusystème(S).
Lesystèmed’équationslinéaires(S)peutsemettresousécriture matricielle :
(S)⇔AX =B
avec A=
a1,1a1,2··· a1,n
a2,1a2,2··· a2,n
··· ··· ··· ···
an,1an,2··· an,n
,X=
x1
x2
···
xn
et B=
b1
b2
···
bn
Larésolutiondusystèmed’équations(S)parlaméthodedupivot de Gauss se
décomposeendeuxgrandesétapes:
4
Lycée Victor Hugo IPT 2eannée 2016-17
1. échelonnement du système (descente),
2. réduction du système (remontée).
Cesdeuxétapesd’échelonnementetderéductiondusystèmesontréaliséesen
effectuantdesopérations élémentaires sur les lignes, ce qui correspond à des
opérationssurleséquations:
– multiplicationd’uneligneparunscalairenonnul(Li←λLi)avecλ6=0,
– ajoutdeλLiàLjLj←Lj+λLiaveci6=j,
– échangedelignesLi↔Lj.
Chaqueopérationélémentaireétantinversibleparuneopérationélémentaire(de
mêmetype),lesystème(S)et toutsystème(S’)obtenuàpartirde (S)àl’aide
d’opérations élémentaires sur les lignes, sont équivalents et admettent donc les
mêmessolutions.
Effectuerdesopérationssurleslignesdusystème(S)revient àeffectuerces
mêmesopérationssurleslignesdelamatriceAetduvecteurB.Plutôtqued’effec-
tuerchaqueopérationélémentairesurApuissurB,lesopérationsseronteffectuées
uneseulefoissurunematricequel’onnommematriceaugmentéedusystème(S).
Lamatriceaugmentéedusystème(S)estlamatricenotée(A|B):
(A|B)=
a1,1a1,2··· a1,n b1
a2,1a2,2··· a2,n b2
··· ··· ··· ··· ···
an,1an,2··· an,n bn
SilamatriceAdusystèmeestinversible(systèmedeCramer)alorslesystème
(S)AX =BadmetdoncuneuniquesolutionX=A−1B.Danslecascontraire,
nouspréciseronscequipermetderepérerquelamatriceAn’estpasinversibleau
coursdudéroulementduprogramme.
1 Échelonnement du système
1. Premièreétape:
(a) Onsupposequelepremiercoefficientdelapremièreligneestnonnul
(a1,16=0,quitteàéchangerdeuxlignes).Cepremiercoefficientnonnul
s’appellelepremierpivot.
(b) OneffectuedesopérationsLi←Li+λL1pouriallantde2àndemanière
àfairedisparaîtrex1deséquations2àn.
2. Deuxièmeétape:Onrecommencelesétapes(a)et(b)avecleslignes2ànet
l’inconnuex2(oncherchedoncunpivotsurla2ième colonnedansleslignesL2
àLn).
3. Étapessuivantes,jusqu’àla(n−1)ième étape:Onrecommenceleprocessus
afind’obtenirunematriceéchelonnée(laième étapeconsistantàchercherun
pivotsurlaième colonnedansleslignesLiàLn).
Àl’issuedecesopérations,onaboutitàunematriceaugmentéeéchelonnéedu
type:
(A|B)0=
a0
1,1a0
1,2··· a0
1,n−1a0
1,n b0
1
0a0
2,2··· a0
2,n−1a0
2,n b0
2
0 0 ··· a0
3,n−1a0
3,n b0
3
··· ··· ··· ··· ··· ···
0 0 ··· 0a0
n,n b0
n
Cas d’une matrice Anon inversible : s’il n’est pas possible de trouver un
pivot(nonnul)surlaième colonnedansleslignesLiàLn,lamatriceAn’estpas
inversible,oninterromptl’algorithmeetonretourneunmessaged’erreur.
2 Réduction du système
1. ParmultiplicationdechaqueligneLipar 1
a0
i,i ,onchangelavaleurdespivots
en1.
2. Ladernièrelignedonnealorslavaleurdexn.Onutiliselepivotvalant1sur
ladernièreligneetladernièrecolonnepouréliminerxndeséquationsL1à
Ln−1pardesopérationsdelaformeLi←Li+λLj.
3. LaligneLn−1donnealorslavaleurdexn−1.Onutiliselepivotvalant1en
position(n−1,n −1)pouréliminerxn−1deséquationsL2àLn−2.
4. Onfaitdemêmejusqu’àlaligneL2.
5
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!