Algorithmes simples
Vidéo disponible dans la version Premium
Durée : 55 min
Algorithmes simples
### 1. Recherche dans une liste (recherche séquentielle)
Pour savoir si une valeur v se trouve dans une liste L, on parcourt la liste élément par élément :
> def recherche(L, v):
> for x in L:
> if x == v:
> return True
> return False
Cette méthode, appelée recherche séquentielle, a un coût proportionnel à la longueur de la liste dans le pire cas (la valeur n'est pas présente, ou se trouve en dernière position) : on dit qu'elle est de complexité linéaire, où .
Variante : trouver l'indice d'une valeur.
> def indice(L, v):
> for i in range(len(L)):
> if L[i] == v:
> return i
> return -1
On renvoie souvent par convention pour signaler que la valeur n'a pas été trouvée.
### 2. Tri par sélection
Le tri par sélection construit la liste triée en répétant le principe suivant : trouver le plus petit élément restant et le placer en tête.
> def tri_selection(L):
> n = len(L)
> for i in range(n):
> indice_min = i
> for j in range(i+1, n):
> if L[j] < L[indice_min]:
> indice_min = j
> L[i], L[indice_min] = L[indice_min], L[i]
> return L
À chaque étape , on cherche le minimum parmi les éléments d'indices (la partie non encore triée), puis on l'échange avec l'élément d'indice .
Exemple résolu : trier .
- : minimum de est (indice ) → échange :
- : minimum de (indices à ) est , déjà en place :
- : minimum de est (indice ) → échange :
- : minimum de est , déjà en place : (trié)
### 3. Tri par insertion (alternative)
Le tri par insertion construit la partie triée en insérant chaque nouvel élément à sa bonne place parmi les éléments déjà triés :
> def tri_insertion(L):
> for i in range(1, len(L)):
> cle = L[i]
> j = i - 1
> while j >= 0 and L[j] > cle:
> L[j+1] = L[j]
> j = j - 1
> L[j+1] = cle
> return L
### 4. Calcul de moyenne et de somme
> def somme(L):
> s = 0
> for x in L:
> s = s + x
> return s
>
> def moyenne(L):
> return somme(L) / len(L)
### 5. Calcul itératif du PGCD (algorithme d'Euclide)
Le PGCD (plus grand commun diviseur) de deux entiers et se calcule par l'algorithme d'Euclide, fondé sur la propriété , avec :
> def pgcd(a, b):
> while b != 0:
> a, b = b, a % b
> return a
Exemple résolu : .
- : → nouveau couple
- : →
- : →
- : on renvoie .
Donc .
### 6. Résumé des complexités
| Algorithme | Complexité (pire cas) |
|---|---|
| Recherche séquentielle | |
| Tri par sélection | |
| Tri par insertion | |
| Algorithme d'Euclide | |
Exercices
Que renvoie recherche([3, 7, 1], 7) pour la fonction de recherche séquentielle du cours ?
Quel est le pgcd de et ?
Vrai ou faux : le tri par sélection trouve, à chaque étape, le plus petit élément restant et le place en tête de la partie non triée.
Quelle valeur renvoie la fonction indice(L, v) du cours si v n'est pas présent dans L ?
Quelle est la complexité (en pire cas) de la recherche séquentielle dans une liste de longueur ?
Suivez votre progression
Connectez-vous pour sauvegarder votre avancement et gagner des XP.