Recherche de l’´el´ement majoritaire [dr06] - Exercice
Karine Zampieri, St´ephane Rivi`ere, B´eatrice Amerein-Soltner
Unisciel algoprog Version 24 octobre 2016
Table des mati`eres
1´
Enonc´e 2
2 Algorithmique, Programmation 2
2.1 Algorithme na¨
ıf ................................ 2
2.2 Premier algorithme Diviser Pour R´egner .................. 3
2.3 Deuxi`eme algorithme Diviser Pour R´egner ................. 3
alg - Recherche de l’´el´ement majoritaire (TD)
Mots-Cl´es Diviser pour r´egner
Requis Axiomatique imp´erative, R´ecursivit´e des actions, Complexit´e des algorithmes
Difficult´e ••◦ (1 h 30)
Objectif
Cet exercice s’ineresse `a la complexit´e au pire de la recherche d’un ´el´ement majoritaire
dans une s´equence tabulaire.
1
Unisciel algoprog – Recherche de l’´el´ement majoritaire [dr06] 2
1´
Enonc´e
Soit une s´equence tabulaire Ade n´el´ements, n´etant suppos´e ˆetre une puissance de deux.
On suppose les d´efinitions et op´erations suivantes :
Constante MAXELEMS <-...
Type Element
| ...
FinType
Type Sequence
|elems :Element [MAXELEMS ]
|taille :Entier
FinType
Fonction ieme (DR A:Sequence ;k:Entier ):Element
Début
|Retourner (A.elems [k] )
Fin
Action fixerIeme (DR A:Sequence ;k:Entier ;valeur :Element )
Début
|A.elems [k]<-valeur
Fin
Nous supposons ´egalement que la seule op´eration `a notre disposition, not´ee =, nous
permet de v´erifier si deux Element sont ou non ´egaux.
D´efinition
Un ´el´ement xde Aest dit majoritaire si et seulement si Acontient strictement plus
de n/2occurrences de x.
Probl`eme
Nous nous ineresserons `a la complexit´e au pire de l’op´eration majoritaire(A) qui
teste et renvoie Vrai si une Sequence A contient un ´el´ement majoritaire, Faux sinon.
2 Algorithmique, Programmation
2.1 Algorithme na
¨
ıf
L’algorithme na¨
ıf calcule le nombre d’occurrences de chaque ´el´ement de la s´equence.
´
Ecrivez une fonction occurrences(A,x,g,h) qui calcule et renvoie le nombre d’occur-
rences d’une valeur xpr´esentes entre les indices get hd’une Sequence A.
Quelle est sa complexit´e au pire ?
Unisciel algoprog – Recherche de l’´el´ement majoritaire [dr06] 3
Au moyen de l’algorithme pr´ec´edent,
´
Ecrivez une fonction majoritaire1(A) qui teste et renvoie Vrai si une Sequence A
contient un ´el´ement majoritaire, Faux sinon.
Quelle est sa complexit´e au pire ?
2.2 Premier algorithme Diviser Pour R´egner
Ce probl`eme d´efinit un premier algorithme Diviser Pour R´egner. Cet algorithme divisera
en deux la Sequence A sur lequel il travaille. Il renverra :
Le couple (Vrai,x) si Acontient un ´el´ement majoritaire (x´etant cet ´el´ement).
Le couple (Faux,0) sinon (Ane contient pas d’´el´ement majoritaire).
´
Ecrivez une fonction r´ecursive majoritaire2Rec(A,g,h) qui effectue ce travail entre les
indices get hd’une Sequence A.
Orientation
Si g=h : l’´el´ement majoritaire est A[g].
Sinon appelez r´ecursivement votre fonction sur la partie gauche (r´esultat (rx,x))
et sur la partie droite (r´esultat (ry,y)).
Analysez les bool´eens rx et ry puis les valeurs xet y.
D´eduisez une fonction majoritaire2(A) construit selon le paradigme «diviser pour
r´egner ».
Montrez que votre algorithme est correct.
Quelle est sa complexit´e au pire ?
2.3 Deuxi`eme algorithme Diviser Pour R´egner
Ce probl`eme d´efinit un deuxi`eme algorithme Diviser Pour R´egner.
´
Ecrivez une fonction pseudoMajoritaire(A) construit selon le paradigme «diviser pour
r´egner », prenant en entr´ee une Sequence A, qu’elle divisera en deux, et qui renvoie :
Soit le triplet (Faux,0,0) qui garantit que Ane contient pas d’´el´ement majoritaire.
Soit le triplet (Vrai,x,cx) o`u xest un ´el´ement de Aet cx> n/2un entier, tels
que xapparaisse au plus cxfois dans Aet que tout autre ´el´ement de Aapparaisse
au plus ncxfois dans A.
Unisciel algoprog – Recherche de l’´el´ement majoritaire [dr06] 4
Orientation
Comme dans le probl`eme pr´ec´edent, ´ecrivez une fonction r´ecursive
pseudoMajoritaireRec(A,g,h) qui effectue ce travail entre les indices get hd’une
Sequence A et traitez les diff´erents cas.
Montrez que votre algorithme est correct.
Quelle est sa complexit´e au pire ?
`
A partir de l’algorithme pr´ec´edent,
D´eduisez une fonction majoritaire3(A) qui teste et renvoie Vrai si une Sequence A
contient un ´el´ement majoritaire, Faux sinon.
Quelle est sa complexit´e au pire ?
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !