Suite monotone (cachée dans une suite aléatoire)

Algorithmique > Suite monotone (cachée dans une suite aléatoire) [ Réagir ]

Description du problème

Soit (Un) une suite de n termes réels, générée de façon aléatoire, ou contenant des données provenant d'une source extérieure. L'objectif est de trouver, à l'intérieur de cette suite, la suite monotone (Vm) contenant le plus de termes possibles. (Les éléments de (Vm) étant rangés dans le même ordre dans chacune des deux suites.)

Complexité en temps

Bien que la solution proposée soit bien meilleure que la solution brutale et récursive que l'on pourrait envisager en première tentative, la complexité en temps d'exécution de l'algorithme ci-dessous est tout de même en Ω(n²/2).

Adaptations

L'exemple de code qui suit renvoie le nombre de termes de (Vm), qui est construite comme une suite strictement croissante. De nombreuses adaptations peuvent être effectuées sur ce code :

Code (Pascal)

type TDoubleArray = Array of Double;

function SuiteMonotone(T: TDoubleArray; N: Integer): Integer;
var
  I,J: Integer;
  Best: TDoubleArray;
begin

  Result:=0;
  SetLength(Best,N);
  For I:= 0 to N-1 do
    begin
//    if (T[I]<T[0]) then Best[I]:=0
//    else
//      begin      
          Best[I]:=1;
          For J:= 0 to I-1 do
            if (T[J]<T[I]) then
              if (Best[J]+1)>Best[I] then Best[I]:=Best[J]+1;
          if (Best[I]>Result) then Result:=Best[I];
//      end;
    end;

end;