On a T(n) = 2 * T(n/2) + O(1)
. Consignes :
Ici on a a = 2
, b = 2
et f(n) = n^(0)
.
De plus nlog2(2) = n1 = n
d'ou ε = 1 (on est dans le cas n°1)
T(n) = O(nlog2(2)) = O(n)
T(n) = T(⌊n/2⌋) + T(⌈n/2⌉) + 1 (⌊ x ⌋ représente la partie entière de x)
T(n) = 2 * T(n/2) + O(1)
Le théorème de la méthode générale est aussi appelé théorème maître ou théorème master.
On cherche ici à trouver l'élément maximal avec des listes triées par ordre croissant.
On possède 3 listes A1, A2, A3 avec |A1|, |A2|, |A3| le nombre d'élément des 3 listes. Consignes :
1.
fonction min(A1[1..|A1|]: entier, A2[1..|A2|]: entier, A3[1..|A3|]: entier): entier var min : entier; début min <- A1[1] si (min > A2[1]) alors min <- A2[1]; fin si si (min > A3[1]) alors min <- A3[1]; fin si renvoyer min; fin
2. Complexité: T(n) = O(1), le coup est toujours constant quelque soit la taille des listes.
3. Même complexité, le coup sera aussi constant pour k listes.
On souhaite réaliser un tri par paquets.
En entrée, on a un ensemble A à n éléments et on a 0 ≤ A[i] < 1. On possède également un tableau auxiliaire B[0], l[n-1] de listes chaînées. Voici l'algorithme utilisé:
début pour i <- 1 à n faire // insérer A[i] dans B[|_ n * A[i] _|] fin pour i <- 0 à (n-1) faire // trier la liste B[i] via tri par insértion fin // concaténer les listes B[i] fin
Consignes:
1.
B +-------+ 0 | | -> NIL +-------+ 1 | | -> [0.15] -> [0.17] -> NIL +-------+ 2 | | -> [0.21] -> NIL +-------+ 3 | | -> [0.38] -> NIL +-------+ 4 | | -> NIL +-------+ 5 | | -> [0.53] -> NIL +-------+ 6 | | -> [0.63] -> [0.62] -> NIL +-------+ 7 | | -> [0.77] -> [0.71] -> NIL +-------+ 8 | | -> [0.89] -> NIL +-------+ 9 | | -> NIL +-------+
2. T(n) = O(n2)
(dans le cas défavorable) et T(n) = Ω(n)
On possède un ensemble S ayant n ≥ 2 entiers distincts (non trié). On souhaite trouver un algorithme qui affiche tous les couples x,y ∈ S2 | |x-y| ≤ 1/(n-1) * (max(S) - min(S)). Consignes :
1.
Naïf(S: tableau[1..MAX] d'entiers, n: entier) var i, max, min : entier; début max <- S[1]; min <- S[1]; pour i = 2 à n faire si (S[i] > Max) alors max <- S[i]; si (S[i] < Min) alors min <- S[i]; // L'algorithme a une complexité en O(n^2) car il // y a deux boucles imbriquées. pour i <- 1 à n faire pour j <- 1 à n faire si abs(x - y) <= 1 / (n - 1) + (max - min) alors écrire(x, y); fin si fin pour fin pour fin
2. Chercher soit même. :trollface: