Vous êtes sur la page 1sur 11

Programmation Oriente Objet

Cours n9 : Algorithmes et complexit


Alain Giorgetti giorgett@lifc.univ-fcomte.fr
http://lib.univ-fcomte.fr/~giorgett/

Laboratoire d'Informatique de lUniversit de Franche-Comt

Notion d'algorithme
Algorithme : ensemble d'actions visant un objectif simple et bien dfini de traitement d'information
correspond souvent un verbe d'action
changer, recevoir, ranger, compter, construire

agit sur des donnes initiales variables ("entres") produit des rsultats ("sorties") ou des effets pour un mme besoin, plusieurs algorithmes possibles

Programmation d'un algorithme


expression dans un langage de programmation un seul algorithme, plusieurs programmes (variantes) styles de programmation (itrative, rcursive )
Algorithmes et complexit - A. Giorgetti 2

Traitement des collections


Origine des collections
1, 2, plusieurs
monme, binme, polynme point, segment, triangle, polygone

regroupe plusieurs donnes de mme nature

Traitements
systmatiques, itratifs ou rcursifs
affichage saisie recherche dlments

Si ordre sur les lments : classement, tri Efficaces jusqu quelles tailles de collections ?
Algorithmes et complexit - A. Giorgetti 3

Structures collectives tudies


Tables
tableaux (array en Pascal) amliors tri par insertion : nombreux dcalages si le tableau est tri, recherche efficace (dichotomie)

Listes chanes
pour des insertions et des suppressions efficaces recherche dans une liste : peu efficace tri dune liste par fusion

Arbres binaires de recherche (ABR)


pour une recherche efficace structure maintenue trie sur ajouts et suppressions
Algorithmes et complexit - A. Giorgetti 4

Complexit dun algorithme


Pour mesurer lefficacit dun algorithme, pour comparer des algorithmes
cot en nombre doprations, en fonction du nombre n de donnes (mots mmoire ou bits) traiter algorithme polynomial : O(n 2) , O(n 3), oprations
parcours dune matrice carre n x n, produit de 2 matrices, ...

algorithme exponentiel : O(e n)


inutilisable en pratique si n > N

Cot moyen : pas facile calculer


hypothses probabilistes sur la rpartition des donnes

Complexit : cot maximal, pire des cas


Algorithmes et complexit - A. Giorgetti 5

Complexit : premiers exemples


Recherche dans un tableau non tri de n lments
pire des cas : lment cherch absent du tableau complexit linaire : O(n) tests

Tri naf dun tableau


algorithme : pour chaque rang i ( 1) dans le tableau, complexit
rechercher le maximum des lments non tris (de i n) changer ce maximum avec le premier lment non tri (en i)

pire des cas : tableau tri lenvers pour le rang i, la recherche cote au plus n - i +1 tests au total, n + (n - 1) + (n - 2) + + 1 = n (n + 1)/2 tests complexit quadratique : O(n 2), car n ngligeable devant n 2

naf car il existe des tris plus efficaces


Algorithmes et complexit - A. Giorgetti 6

Tri dun tableau par insertion


Donnes trier
T [1], T [2], , T [n]

Algorithme
Pour chaque rang i , avec 2 i n, insrer T [i] dans T [1], , T [i - 1] supposs tris. Linsertion seffectue par dcalages successifs.

Complexit
pire des cas : tableau tri lenvers pour le rang i, linsertion ncessite au pire i - 1 dcalages (et une affectation) au total, 2 + 3 + + (n - 1) + n complexit quadratique : O(n 2)

Il existe des tris plus efficaces


Algorithmes et complexit - A. Giorgetti 7

Recherche par dichotomie


Recherche de lindice dun lment x dans un tableau tri par ordre croissant
T [1] T [2] T [n]

Algorithme rcursif
forme gnrale : recherche entre T [i] et T [ j]
arrt si i > j

choisir un rang m entre i et j


plus efficace si m est le milieu de [i, j]

comparer x avec T [m]


retourner m si x = T [m] recherche entre T [i] et T [m] si x < T [m] recherche entre T [m+1] et T [j] si x > T [m]
Algorithmes et complexit - A. Giorgetti 8

Complexit dune dichotomie


Soit C(n) la complexit dune recherche par dichotomie sur n donnes
on suppose que n = 2k - 1 pour n = 1, une seule comparaison donc C(1) = 1 pour n > 1, on choisit m gal (n + 1) / 2 = 2 k - 1
une comparaison entre x et T [m], qui choue (pire des cas) une recherche entre T [1] et T [m - 1], cot C( (n-1)/2 ) < C(n/2) ou une recherche entre T [m + 1] et T [n], cot < C(n/2) ainsi, C(n) = 1+C(n/2) ou C( 2k - 1) = 1 + C( 2k - 1 - 1) la suite uk = C( 2k - 1) est arithmtique de raison 1 et u1 = 1

On vrifie que C(n) = k = log2(n + 1)

Complexit logarithmique : O(log2 n)


Algorithmes et complexit - A. Giorgetti 9

Algorithmes de tri efficaces


Tri par insertion, tri bulle, ... : O(n 2) Tri rapide (quicksort)
cot moyen O(n log n) mais complexit (pire des cas) en O(n 2)

Tris de complexit O(n log n)


tri par tas (heapsort)
tas :
(1) arbre binaire quilibr presque complet (2) chaque nud est suprieur ou gal ses fils

tri de meilleure complexit dans le pire des cas mais moins bon en moyenne que le tri rapide

Algorithmes et complexit - A. Giorgetti

10

Tri par arbre binaire de recherche


Principe
insrer toutes les donnes trier dans un ABR parcourir lABR en ordre infix

Complexit
insertion de n donnes une une dans un ABR
hypothse : linsertion ne dsquilibre pas larbre insertion aux feuilles de larbre nombre de nuds parcourus :

log2 1 + log2 2 + log2 3 + + log2 (n-1) < n log2 n parcours rcursif de lABR en O(n) oprations total : O(n log2 n) si on maintient lquilibre de larbre
conduit la notion de tas et au tri par tas (heapsort)
Algorithmes et complexit - A. Giorgetti 11