24-NSIJ2JA1-1
-
Pour être strictement majoritaire dans une liste de taille 10, un élément doit apparaître au moins \(\left\lceil \frac{10}{2} \right\rceil = \boxed{6}\) fois.
-
La fonction
effectif
effectue une comparaison par élément. Puisqu'il y a 9 éléments ici, elle effectue 9 comparaisons. -
Dans le pire des cas où il n'y a pas d'élément strictement majoritaire, cet appel effectue 9 × 9 + 9 = 90 comparaisons.
-
Si la liste possède un seul élément alors
lst[0]
est absolument majoritaire. -
Si ni
lst1
nilst2
n'admet d'élément absolument majoritaire, dans le cas plus extrême, un élément apparaît au plus \(\left\lfloor \frac{n}{4} \right\rfloor\) fois dans les deux-sous listes. Ainsi dans la liste initialelst
, cet élément apparaît au plus \(2 \times \left\lfloor \frac{n}{4} \right\rfloor \leq \left\lfloor \frac{n}{2} \right\rfloor\) fois. Or, le seuil pour qu'il soit strictement majoritaire est d'au moins \(\left\lfloor \frac{n}{2} \right\rfloor + 1\). Donclst
n'admet pas d'élément strictement majoritaire. -
On compte le nombre d'occurence de cet élément
maj1
dans la liste initialelst
, s'il est strictement supérieur à \(\left\lfloor \frac{n}{2} \right\rfloor\) alors il est strictement majoritaire. -
def majo_abs3(lst): n = len(lst) if n == 1: return lst[0] else: lst_g = lst[:n//2] lst_d = lst[n//2:] maj_g = majo_abs3(lst_g) maj_d = majo_abs3(lst_d) if maj_g is not None: eff = effectif(maj_g, lst) if eff > n / 2: return maj_g if maj_d is not None: eff = effectif(maj_d, lst) if eff > n / 2: return maj_d return None