Tableau avec des éléments tous différents⚓︎
Un tableau peut contenir plusieurs fois le même élément. C'est le cas du tableau tableau_1
ci-dessous :
tableau_1 = [1, 2, 3, 6, 2, 4, 5]
2
est deux fois dans ce tableau.
Au contraire, dans le tableau tableau_2
, toutes les valeurs sont uniques :
tableau_2 = ['chien', 'chat', 'lion', 'poisson']
Écrire une fonction tous_differents
qui prend un tableau tableau
et renvoie un booléen indiquant si toutes les valeurs de tableau
sont différentes ou non.
Taille des tableaux
Pour limiter le temps de calcul, on se limitera à des tests avec des tableaux de moins de 100 éléments.
Utilisation de range(a, b)
On pourra éventuellement utiliser range(a, b)
qui itère sur toutes
les valeurs entières allant de a
inclus à b
exclu.
Exemples
>>> tableau_1 = [1, 2, 3, 6, 2, 4, 5]
>>> tous_differents(tableau_1)
False
>>> tableau_2 = ['chien', 'chat', 'lion', 'poisson']
>>> tous_differents(tableau_2)
True
def touspy-unddifferents(tableau):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nltableau1 = [1, 2, 3, 6, 2, 4, 5]bksl-nlassert touspy-unddifferents(tableau1) == Falsebksl-nlbksl-nltableau2 = ['chien', 'chat', 'lion', 'poisson']bksl-nlassert touspy-unddifferents(tableau2) == Truebksl-nlbksl-nlbksl-nldef touspy-unddifferents(tableau):bksl-nl n = len(tableau)bksl-nl for i in range(n - 1):bksl-nl for j in range(i + 1, n):bksl-nl if tableau[i] == tableau[j]:bksl-nl return Falsebksl-nl return Truebksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nltableau1 = [1, 2, 3, 6, 2, 4, 5]bksl-nlassert touspy-unddifferents(tableau1) == Falsebksl-nlbksl-nltableau2 = ['chien', 'chat', 'lion', 'poisson']bksl-nlassert touspy-unddifferents(tableau2) == Truebksl-nlbksl-nlbksl-nl
A
Même si on essaie d'être malin en ne parcourant que les éléments suivants pour voir si un élément apparait plusieurs fois, cette fonction a un cout quadratique. En gros, avec un tableau de taille \(n\) on va faire environ \(n^2\) comparaisons.
L'optimisation de ne regarder que les éléments suivants permet de diviser par 2 le nombre de tests, mais cela reste beaucoup.
Avec un dictionnaire⚓︎
Avec un dictionnaire, la recherche d'un élément est en cout constant, ainsi l'exercice a un cout linéaire en sa taille.
def tous_differents(tableau):
vus = dict()
for element in tableau:
if element in vus:
return False
else:
vus[element] = True
return True
Z