NSI (terminale) · Chapitre 6 · Exercice de TD
Problème — Élément majoritaire
Diviser pour régner · niveau 3 (difficile)
Énoncé
Problème — Élément majoritaire.
Un élément est dit majoritaire dans un tableau de taille s'il y apparaît strictement plus de fois. Concevoir un algorithme « diviser pour régner » qui détermine s'il existe un élément majoritaire, et lequel.
Corrigé
on coupe le tableau en deux moitiés. Si un élément est majoritaire dans le tableau entier, il l'est nécessairement dans au moins l'une des deux moitiés. On résout donc récursivement à gauche et à droite, puis on vérifie par comptage lequel des deux candidats est réellement majoritaire sur l'ensemble.
def compte(tab, x, g, d):
return sum(1 for k in range(g, d + 1) if tab[k] == x)
def majoritaire(tab, g, d):
if g == d: # cas de base
return tab[g]
m = (g + d) // 2
cand_g = majoritaire(tab, g, m)
cand_d = majoritaire(tab, m + 1, d)
if cand_g == cand_d:
return cand_g
# on compare les comptages des deux candidats
taille = d - g + 1
if compte(tab, cand_g, g, d) > taille // 2:
return cand_g
if compte(tab, cand_d, g, d) > taille // 2:
return cand_d
return None # pas de majoritaire
def element_majoritaire(tab):
return majoritaire(tab, 0, len(tab) - 1)
La relation de récurrence donne une complexité en , meilleure que l'approche naïve en qui compterait chaque élément.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 7 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.