29
Diviser pour Régner (quelques clés pour la lecon 902) Loïc Hélouët [email protected]

Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Diviser pour Régner (quelques clés pour la lecon 902)

Loïc Hélouët

[email protected]

Page 2: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Plan

Principe Exemples classiques Recherche d’index dichotomique Calcul d’enveloppe convexe Transformée de Fourrier

Complexité

Page 3: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Diviser pour régner

Principes en 3 étapes Prenons un problème P de taille n: Diviser le problème en un certain nombre de sous-problèmes de taille <n Régner sur les sous-problèmes en les résolvant récursivement (si la taille est réduite, on a souvent une solution immédiate) Combiner les solutions des sous-problèmes

Page 4: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Diviser pour régner

Implicitement : il existe k, petit, pour lequel la résolution de P[k] est triviale (ex :trier un tableau de taille 1,….) Plusieurs cas : la résolution d’un seul sous-problème suffit

Pas besoin de fusionner les résultats exemple : recherche dichotomique

On résout c problèmes de taille n/c une étape de fusion des résultat est nécessaire Exemples : le tri fusion, le calcul d’enveloppe convexe

Page 5: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Recherche d’Index Exemple 1 : Recherche d’index dans une liste triée

Donnée du problème : un tableau trié de taille n, un nombre x (existant) Résultat : l’index de x dans le tableau

1 2 3 n

5 12 23 78

ChercherSimple(T,v) = Pour i dans 1..n faire si ( T[i] = x) alors resultat = i; break; fsi fpour

ChercherDicho (T,x,i,j) = k=i + (j-i)/2 si T[k] == x alors resutat = k; si T[k] > x alors chercherDicho(x,i,k-1) sinon chercherDicho(x,k+1,j) fsi

Pire cas : O(n) Pire cas : O( log(n) )

Page 6: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Exemple 2 : tri fusion Exemple 3 : Calcul d’enveloppe convexe

Donnée : liste d’au moins 3 points P, ordonnés selon leur abscisse Sortie : liste des points formant l’enveloppe convexe de P

Principe de l’algo:

Couper l’ensemble des pts en 2

Calculer 2 enveloppes séparées

Utiliser les 2 resultats pour

calculer une plus grande

enveloppe.

Page 7: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Exemple 3 : Calcul d’enveloppe convexe

Donnée : un ensemble d’au moins 3 points P, ordonnés selon leur abscisse Sortie : liste des points formant l’enveloppe convexe de P

Cas triviaux : 1,2, 3 points

Page 8: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe

Convexe (P)

P: liste de points de taille n

Si ( |P| 3) alors

renvoyer P

Sinon

P1 = Convexe(P[1..n/2])

P2 = Convexe(P[n/2..n])

renvoyer FusionConvexe(P1,P2)

finsi

x

z

y t

t ne « voit » pas x si [x,t] [y,z]

se croisent

Page 9: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Fusion Convexe

Donnée: P1, liste avec chainage double de points, ordonnés dans le sens trigo et inverse P2, liste avec chainage double de points, ordonnés dans le sens trigo et inverse. Sortie : liste des points formant l’enveloppe convexe de P (ord.trigo.)

Page 10: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Fusion Convexe: Etape 1

Choisir x1, point d’abscisse maximale de P1 Choisir x2, point d’abscisse maximale de P2

x1

x2

Page 11: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Fusion Convexe: Etape 2

Calculer Un « pont supérieur » : plus haut segment dont les points « se voient »

x1

x2

Page 12: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Fusion Convexe: Etape 2

Calculer Un « pont inférieur » : plus bas segment dont les points « se voient »

x1

x2

Page 13: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Fusion Convexe: Etape 3

Eliminer les points entre les 2 ponts (parcours de P1 & P2 dans le sens trigo. En passant par les ponts)

x2

Page 14: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Enveloppe convexe Pont Supérieur (P1, P2 : listes, x1,x2 : points) Trouvé = faux ; g=x1; d=x2 ; Tant que (trouvé == faux) faire Trouvé = vrai Tant que ( g « voit » [d,prec(d)] faire d=prec(d) trouve := faux Finfaire Tant que ( d « voit » [g,succ(g)] faire d=prec(d) trouve := faux Finfaire Finfaire Renvoyer (g,d)

Page 15: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Transformée de Fourrier

Traitement du signal

passage d’un signal donné dans un domaine des temps

… à un domaine de fréquences

somme pondérée de sinusoïdes à décalage de phase

Intérêt : opérations sur les polynômes plus rapides ( (n) )

Le passage par la transformée permet des opération en (n log n )

au lieu de (n2) (ex produits de polynômes)

[Cormen, chap30]

Page 16: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Transformée de Fourrier

Passage d’une représentation par un polynome A(x)

Representable par un vecteur

À une représentation par n paires point-valeur, d’abscisses distinctes

Theorème :

Il n’existe qu’un polynome de degré <n tel que

[Cormen, chap30]

),..,( 10 naaA

),(),...,,( 1100 nn yxyx

)( kk xAy

nj

j

i xaxA..1

.)(

Page 17: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Transformée de Fourrier

Passage d’une representation par un polynome A(x)

Representable par un vecteur

À une transformée de Fourrier :

[Cormen, chap30]

),..,( 10 naaA

nj

j

i xaxA..1

.)(

1

0

.)(n

j

kj

nj

k

nk aAy ),..,( 10 nyyy

k

n keme racine complexe de l’unité

Page 18: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

12/

220

]0[ ....)(

n

n xaxaaxA

12/

131

]1[ ....)(

n

n xaxaaxA

)()()( 2]1[2]0[ xxAxAxA

Page 19: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

FFT-Recursive( A)

A : tableau

Var

y, a[0] , a[1] , y[0] , y[1] :tableaux

n= longueur(A)

Si (n==1) alors

renvoyer(A)

Sinon

n= e2i/n

= 1 a[0]=(a0,…an-2)

a[1]=(a1,…an-1)

y[0]=FFT-Recursive(a[0])

y[1]=FFT-Recursive(a[1])

pour k dans 0..n/2-1 faire

yk=yk[0] + yk

[1]

yk+n/2=yk[0] - yk

[1]

= n fait

renvoyer y

Le calcul de la FFT se fait

En (n log n)

Page 20: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité

Cout C(n) d’un algorithme : C(n) = D(n) + R(n) + F(n) Diviser D(n) le problème Régner R(n) (résoudre les pbs de taille inférieure) Combiner F(n) les solutions Si l’algorithme contient des appels récursifs, le coût est décrit par une équation de récurrence.

Page 21: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité

Diviser le problème : cout D(n) Partition simple : cout constant K exemple : recherche dichotomique = 2 comparaisons Partition plus complexe exemple : partition selon la médiane : O(n)

Page 22: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Rappel : notation de Landau

Notation Intuition sémantique

f(n) O ( g(n) ) f bornée par g asymptotiquement à un facteur près

f(n) ( g(n) ) f minorée par g asymptotiquement à un facteur près

f(n) ( g(n) ) f dominée et soumise

à g asymptotiquement

f(n) g(n) f est égal à g asymptotiquement

kngnf

nnnk

).()(

,,,0 00

)().(

,,,0 00

nfkng

nnnk

21

0021

).()().(

,,,0,

kngnfkng

nnnkk

)()()(

,,,0 00

ngnfng

nnn

Page 23: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité

Régner : resoudre les pbs de taille inférieure R(n) Cas simple 1 : Un seul des sous problèmes à résoudre

R(n) = C(m), m<n exemple : recherche dichotomique R(n) = C(n/2)

Cas simple 2: résoudre k problèmes de même taille R(n) = k.C(n/k) exemple tri fusion, enveloppe convexe ( R(n)= 2.C(n/2) )

Cas plus complexe: le problème se partitionne en plusieurs sous-problèmes de tailles différentes R(n) = C(m1) + … + C(mk)

Cas encore difficile: Le problème se partitionne en plusieurs sous problèmes, dont le nombre et la taille dépend de n et de l’entrée du pb. R(n) =??? Récurrence difficile à trouver, difficile à calculer

Page 24: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité

Combiner les solutions : cout F(n) Cas simple : une seule des solutions explorée F(n)=0 exemple : recherche dichotomique Sinon, F(n) dépend :

• de la taille des résultats, • de l’algorithme de fusion, • …

Page 25: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité

Théorème :

Soit P un problème de taille n, divisible en k sous-problèmes de même taille,

et pour lequel la résolution d’un seul problème suffit.

Si

Alors

)()/()( ngknCnC

)(log

1

)()1()(n

ik

kgCnC

Page 26: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Diviser pour Régner

Cout C(n) de l’algorithme : C(n) = D(n) + R(n) + F(n) Exemple : recherche dichotomique Pour n>1,

D(n) = 2 (il faut tester T[k] == x et T[k] < x) R(n) = C(n/2) si n>1 F(n)= 0

))(log(22)2/(2)()2/log(

1

n

nOnCnC

1)1( C

Page 27: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité: Théorème général

Soit P un problème de taille n, divisible en a sous-problèmes de même taille n/b,

Soient a 1, b 1, f(n) une fonction et C(n) tels que

)()/(.)( nfbnCanC

)()(log abnnC

[Cormen, chap4]

• Si

•Si

•Si

)()(log

abnOnf pour e >0 alors

)log()(log

nnnCab)()(

log abnnf alors

)log()(log

nnnCab)()(

log

abnnf pour e >0 alors

)()/( ncfbnaf pour c<1

Page 28: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Complexité: Théorème général

)()/(.)( nfbnCanC

[Cormen, chap4]

)()(log abnOnf

)log()(log

nnnCab

Complexité de la transformée de Fourier:

)log.()()2/(.2)( nnnnCnC fourrierfourrier

avec

Page 29: Diviser pour Régner - Inriapeople.rennes.inria.fr/Loic.Helouet/Teaching/Diviser... · 2016. 1. 26. · Diviser pour régner Principes en 3 étapes Prenons un problème P de taille

Bibliographie

[1] Christine Froidevaux, Marie-Claude Gaudel, Michèle Soria,

Types de Données et Algorithmes, McGraw-Hill, 1990.

[2] Thomas Cormen, Charles Leiserson, Ronald Rivest,

Introduction à l’algorithmique, Dunod, 1994.

Mais aussi:

[3] Robert Sedgewick, Philippe Flajolet, Introduction à l’analyse des

algorithmes, Addison Wesley, 1996.