Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →