# Cour 12 -- Algorithme ###### tags `cour` `M1 S1` `Algorithme` [Somaire](/ueYXUIJIQ6C6hcYzKYeojA#)\ [precedent](/nbznABCGTgmt_Gqn5zgYXw) > [time= 7 dec 2020] [TOC] ## Algorithmes gloutons (suite) On a toujours besoin d'une preuve d'optimalité pour admettre qu'il donne bien une solution optimal. Le probleme de la caissiere est le meme que le probleme des cassettes. ### Problème de la caissière taille des paniers: $x_1, \cdots, x_n$ On veut ordonner les paniers pour minimiser le temps total d'attente. #### Algo glouton: Prendre dans l'ordre: $\gamma(1) \cdots \gamma(n)$\ tel que: $x_{\gamma(1)} \leq x_{\gamma(2)} \leq \cdots \leq x_{\gamma(N)}$ Montrer que tout autre ordre dans un temps d'attente total est superieur au temps pour $\gamma$ $$ Cout(\pi) = \sum_{k=1}^{n} (N - k + 1) x_{\pi}(k) $$ $(N - k + 1) x_{\pi}(k)$ est le temps du $k^{ieme}$ panier contribut à l'attente $$ \gamma \text{ est optimal si } \forall \pi\\ cout(\pi) \geq cout(\gamma) $$ Soit $\pi$ une solution réalisable. On montre qu'il existe des solutions intermédiare: $$ cout(\pi) \geq\\ cout(\pi') \geq\\ \cdots\\ cout(\pi^{(n-1)}) = cout(\gamma) $$ Rapelle de la derniere fois, il restait a démontrer que: $$ \begin{align} cout(\pi) - cout(\pi') &= (N - i + 1)(x_{\pi(i)} - x_{\pi(j)}) + (N - j + 1)(x_{\pi(j)} - x_{\pi(i)})\\ &=(N - i + 1)(x_{\pi(i)} - x_{\pi(j)}) - (N - j + 1)(x_{\pi(i)} - x_{\pi(j)})\\ &=(N - i + 1 - N + j - 1)(x_{\pi(i)} - x_{\pi(j)}) \\ &=( i + j )(x_{\pi(i)} - x_{\pi(j)}) \geq 0\\ \end{align} $$ ou les paniers i et j on été intervertis Dans l'algorithme glouton est optimal. ## exemple 2: choix de taches En entrée: - N tâche avec temps de début et temps de fin: $(d_1, f_1) \cdots (d_n, f_n)$ En sortie: - le plus grand nombre de taches (optimalité) - pouvant être réalisées sans chvauchement (réalisable) ### Algo glouton Trier les taches par ordre de fin croissantes. Sélectionner les taches une à une si elle ne chevauche pas les autres déja sélectionnées. ### Preuve d'optimalité soit $\gamma$ l'ordre goulon: $$ f_{\gamma(1)} \leq f_{\gamma(2)} \leq \cdots f_{\gamma(k)} $$ ![](https://i.imgur.com/FQDqazRl.png) Prenons une autre solution **réalisable** $\pi$ et montrons que $cout(\pi) \leq cout(\gamma)$ où $cout(\pi) =$ le nombre de tâches dans $\pi$ ![](https://i.imgur.com/5WirqJo.png) Si $cout(\gamma) \geq cout(\pi)$, alors on à terminé Si i minimum t.q $\pi(i) \neq \gamma(i)$. ++observation 1++: $$ fin(\pi(i)) \geq fin(\gamma(i)) $$ Parceque $\gamma$ c'est l'algo glouton et que l'lago choisit la prochaine tâche réalisable en ordre croissant ++observation 2++: $$ debut(\pi_{i + 1}) > fin(\pi_i) $$ car $\pi$ est réalisable ++observation 3++: $$ debut(\gamma(i)) > fin(\gamma(i - 1)) = fin(\pi(i - 1)) $$ On construit $\pi'$ à partir de $\pi$ t.q: - $cout(\pi') \geq cout(\pi)$ - $\pi'$ réalisable (bien su!) - La partie commune entre $\pi'$ et $\gamma$ #### Cas 1 $$ debut(\pi(i)) > fin(\gamma(i)) $$ Dans ce cas la solution $$ \pi' = \pi(1) \cdots \pi(i - 1) \gamma(i) \pi(i) \cdots \pi(k) $$ - reste réalisable (Cas et Obs 3) - $cout(\pi') = codut(\pi) + 1$ - $\pi'(1) = \gamma(1) \cdots \gamma(i) = \pi'(i)$ #### Cas 2 $$ debut(\pi(i)) \leq fin(\gamma(i)) $$ prenons plutot $$ \pi' = \pi(1) \cdots \pi(i - 1) \gamma(i) \pi(i + 1) \cdots $$ - réalisable (obs3 et obs 1) - $cout(\pi') = cout(\pi)$ - $\pi'$ a une tache en commun en $\gamma$ $$ cout(\pi) \leq cout(\pi') \leq \cdots \leq cout(\gamma) $$ ![](https://i.imgur.com/kAKugqhm.png) Si à la fin on arrive à une solution $\pi^{(n)} > cout(\gamma)$ et qu'on a épuisé les différences C'est impossible car $\gamma$ aurrait aussi choisis ces taches qui restent réalisables. Donc on a bien: $$ cout(\pi) \leq \cdots \leq cout(\gamma) $$ ## Algorithme d'approximation Pour certains problèmes NP-difficiles parfois un algo non-optinal peut donner une solution en temps polynomial proche d'une solution optimale (en coût). Def: Pour les problmèemes de minimisation on dit qu'un algotithme A est une $\alpha\text{-approximation}$ si: - $\forall x cout(A(x)) \leq \alpha OPT(x)$ (le cout de la solution optimale) - $\forall w cout(A(x)) \geq OPT(x)$ (pour les problemes de maximisation) ### equilibrage des tâches En entrée: - n tache de durée $t(1) \cdots t(n)$ - m un nombre de processurs pour les réaliser En sortie: - une affectation des ta^ches aux processeurs, c'est a dire une fonction P(i) = j - "la tache i est affectée au processeur j" $1 \leq j \leq m$ qui minimise: - $cout(P) = \max_{j} \{\sum_{i} t(i) \}$ Ce probleme est le problmee "makespan" Ce probleme est un probleme NP difficile. #### Algo glouton Prendre les taches une à une les attribuer au processeur le moins chargé jusqu'a maintenant. Cette algo est bien sur pas optimal. ![](https://i.imgur.com/GcU9d0E.png) En revance ici on a une 2 approximation #### Algo 2 Si on tie les taches t.q: $$ t(1) \geq t(2) \geq \cdots \geq t(n) $$ Puis on attribut les tache comme l'algo gouton précédent. Cette algo une 3/2 approximation ### poposition L'algo glouton 1 est une 2 approx #### Lemme 1 Soit t une liste de tâches m le nb de processeurs $$ OPT(t, m) \geq \max_{i} t(i) $$ le processeur a qui on attribue cette ta^che travailel au moins t(i) #### Lemme 2 $$ OPT(t, m) \geq \frac{1}{m} \sum_{i=1}{n} t(i) $$ ### preuve Regardons l'instant k où on place la derniere tâche sur le processeur le plus chargé, supposons que ce processeur soit j. ![](https://i.imgur.com/hLdyg7w.png) Soit $\mathscr{C}$ la charge sur le processeur j. 1. $t(k) \leq OPT$ (lemme 1) 2. $\mathscr{C} \leq OPT:$\ $$ \begin{align} \mathscr{C} &= \frac{1}{m} \sum_{j'=1} \mathscr{C}\\ &\leq \frac{1}{m} \sum_{j'=1} \text{charge}(j')\\ &\leq \frac{1}{m} \sum_{j'=1} t(i)\\ &\leq OPT \end{align} $$ $cout \leq \mathscr{C} + t(k) \leq 2 OPT$ ## Min vertex cover Entrée: - G non-orienté Sortie: - S un sous-ensemble des sommets qui couvre toutes les arretes du graphe (critere de réalisabilité) - de taille min (cout min) Trouver un algo j glouton simple qui donne une 2 approx pour ce problème NP-difficile.