View on GitHub

club-lecture

chapitre 4 - Divide-and-Conquer

exemple : merge sort

3 etapes:

def: “recursive case” = sous probleme qui peut etre divisé def: “bottoms out” = recursion qui se termine def: “base case” = sous problemes resolvables

autres exemples du chapitre :

Recurrences

def: equation ou inegalité definie en fonction d’entrées plus petites

Ex: merge sort, plus mauvais cas:

T(n) =

Theta(1), si n=1 2.T(n/2)+Theta(n), si n>1

et donc T(n)=Theta(n.log n)

Algo recursif par forcement avec des sous problemes de tailles equilibrés. Par exemple 1/3 et 2/3. Pas forcement non plus avec des tailles constantes. Par exemple un element de moins a chaque recursion : T(n)=T(n-1)+Theta(n).

3 methodes de resolutions de Theta ou O :

Parfois, on ne determine que le plus mauvais cas, et on utilise une inegalité dans ce cas. T(n)<=2.T(n/2)+Theta(n). Dans ce cas, utilisation de O. Idem pour >= avec Omega.

Technicalities in recurrences

Mettre de coté certains details techniques. Par exemple, merge sort quand nombre impaire : n/2 n’est pas entier, pas possible de diviser en 2 problemes exactement identiques.

Conditions limites aussi un probleme. Suppose T(n) constant pour n petit.

Plus generalement, mettre de coté les arrondis sup, inf et limites.

4.1 The maximum-subarray problem

example de la bourse.

note: doit contenir des valeurs negatives, sinon le tableau complet est la plus grande somme.

A solution using divide-and-conquer

Division du tableau en 3 solutions, selon mid

Recherche d’une somme max dans un sous tableau contenant mid: FIND-MAX-CROSSING-SUBARRAY

Algo en Theta(n)

recherche d’une somme max dans un sous tableau: FIND-MAXIMUM-SUBARRAY

Analyzing the divide-and-conquer algorithm

hypothese simplificatrice : n puissance de 2. Donc division donne tout le temps un nombre entier.

Donc:

T(n) = Theta(1) + 2.T(n/2) + Theta(n) + Theta(1) = 2.T(n/2) + Theta(n)

Meme solution que merge sort: Theta(n.log n)

4.2 Strassen’s algorithm for matrix multiplication

for (i, j, k) c_i_j = sum_k(a_i_k * b_k_j)

T(n) = Theta(n^3)

A simple divide-and-conquer algorithm

hypothese simplificatrice : n puisssance de 2

SQUARE-MATRIX-MULTIPLY-RECURSIVE(A, B)

note: ne pas copier pour creer les sous matrices, mais faire du calcul d’indice. = Theta(1).

Strassen’s method

Ne calculer que 7 sous matrices par recursion