| 
         
	  Capitolul 9 - METODA GREEDY
      A.Consideratii teoretice
       
        Pentru a exemplifica aceasta metoda consideram o multime A cu n elemente. Si problema care ar trebui rezolvata consta din determinarea unei submultimi B a lui A. Aceasta trebuie sa indeplineasca anumite conditii pentru a fi acceptata ca solutie. Dintre toate submultimile acceptate (numite solutii posibile), se va alege una singura numita solutie optima.
        Dintre solutiile posibile trebuie aleasa cea optima tinand cont de proprietatea urmatoare: Daca B este solutie posibila si C inclusa in B atunci si C este solutie posibila. 
        Multimea vida este intotdeauna solutie posibila.
        Initial se porneste de la multimea vida. Se alege intr-un anumit fel un element din A, neales la pasii precedenti. Daca aceasta adaugare la solutia partial construita conduce la o solutie posibila atunci construim noua solutie posibila prin adaugarea elementului - procedura Greedy1.
       
 procedure Greedy1(A, n, B)
  Begin
        B<-vida
        for i=1 to n do
         begin
              ALEGE(A, i, x)
              POSIBIL(B, x, v)
              if v=1 then ADAUG(B, x)
        end
  end
  Procedura ALEGE selecteaza un element x = aj apartine { aI, . . ., an } si efectueaza interschimbarea ai<=aj. Procedura POSIBIL verifica daca B reunit cu {x} este solutie posibila, caz in care variabila booleana v va lua valoarea 1, altfel ea va lua valoarea 0. Procedura ADAUG inlocuieste pe B cu B reunit cu  {x}. Procedura ALEGE nu precizeaza deloc cum se selecteaza un element x, de aceea trebuie stabilita o procedura de prelucrare  PREL), care va preciza ordinea in care vor fi introduse elementele lui A in solutie - procedura Greedy2 .  
 
 procedure Greedy2(A, n, B)
  begin
       PREL
       B<-vida
       for i=1 to n do
        begin
            POSIBIL(B, ai, x )
            if v=1 then ADAUG(B, ai)
      end
  end
       
      
      
       1.    Suma maxima
      
  Se da o multime X= { x1, x2, . . ., xn } cu elemente reale. Sa se determine o submultime a lui X astfel incat suma elementelor submultimii sa fie maxima.
       Aplicam metoda Greedy selectand din multime toate elementele pozitive. Sa presupunem ca rezultatul  il construim in vectorul S = { s1, s2, . . . , sk } unde k<=n si exista j apartine { 1, 2, . . .,n } astfel incat si=xj pentru orice i=1, … , k.
  program submultime(X, n, S, k)
  begin
       k<-0
       for i=1 to n do
           if xI>0 then 
                begin
                     k<-k+1
                     sk<-xi
                end
  end
     
       2. K divizori naturali
      
  Fiind dat numarul natural k > 1, se cere sa se determine cel mai mic numar natural n avand exact k divizori naturali proprii (diferiti de 1 si n).
  procedure VERFI(n, k, v)
  begin
       i<=0
       for j=2 to n-1 do
            if n mod j = 0 then i<=i+1
         if i=k then v<-true
             else v<=false
  end
  program divizori(k,n)
  begin
       read k
       n<-k+2
       s<-0
       while s=0 do
        begin
             VERIF(n,k,v)
             If v=true then
                     begin
                          write n
                          s<-1
                     end
         n<-n+1
        end
  end.
       
      B.Exemple de programe
       1.    SUMA MAXIMA
      
  Se da o multime X= { x1, x2, . . ., xn } cu elemente reale. Sa se determine o submultime a lui X astfel incat suma elementelor submultimii sa fie maxima.
        (Ioan Odagescu, Felix Furtuna - METODE SI TEHNICI DE PROGRAMARE) 
       
        
      2.    K DIVIZORI NATURALI
      
  Fiind dat numarul natural k > 1, se cere sa se determine cel mai mic numar natural n avand exact k divizori naturali proprii (diferiti de 1 si n).
        (Ioan Odagescu, Felix Furtuna - METODE SI TEHNICI DE PROGRAMARE) 
             
      
      
      3.    PROBLEMA COMIS-VOIAJORULUI
      
  Se considera un graf G neorientat in care oricare doua varfuri distincte sunt unite intre ele. Un comis-voiajor pleaca dintr-un oras (reprezentat de nodurile grafului), si trebuie sa viziteze toate orasele astfel incat costul deplasarii sa fie minim.(fiecare muchie dintre doua noduri are asociat un cost reprezentand distanta dintre cele doua orase).
       Solutia data este generalizata astfel incat se reiau pe rand calculele pentru fiecare nod de pornire {1,2,...,n}.
       
      
      4.    PROBLEMA CONTINUA A RUCSACULUI
      
  O persoana are un rucsac cu care poate transporta o greutate maxima G. Persoana are la dispozitie n obiecte si cunoaste pentru fiecare greutatea si castigul care se obtine in urma transportului sau la destinatie. Se cere sa se precizeze ce obiecte trebuie sa transporte persoana a.i. castigul sa fie maxim.
        Precizare : obiectele pot fi taiate.
        Astfel se obtine o incarcare mai eficienta a rucsacului.
       
        
              
                 
           
             
      C.Exercitii si teme   
      
      
  1.    Sa se ruleze programele prezentate anterior, executand mai multe exemple de test pentru a vedea valorile obtinute in situatii diferite.
      
  2.    Se dau n orase si costul conectarii anumitor perechi de orase. Se cere sa se aleaga acele muchii care asigura existenta unui drum intre oricare doua orase astfel incat costul total sa fie minim. (se poate folosi algoritmul lui Prim)
      
  3.    Problema spectacolelor. Intr-o sala de spectatcole, intr-o zi, trebuie planificate n spectacole Pentru fiecare spectacol se cunoaste intervalul in care se desfasoara: [st,sf). Se cere sa se planifice un numar maxim de spectacole astfel incat sa nu se suprapuna.
      
          
        
      Inapoi | Cuprins | Inainte 
      
     |