fonction min pour un vecteur (optimisation)
Bonjour,
J'ai besoin de faire une recherche d'un minimum dans un ensemble de valeurs.
J'ai deux vecteurs de même dimension 'n' :
- un vecteur 'A' contenant des '0' ou des '1'.
- un vecteur 'B' contenant des nombres quelconques.
Par ailleurs, je connais le nombre 'k' de valeurs '1' du vecteur 'A'.
Je souhaite trouver la valeur minimum du vecteur 'B' restreint aux indices dont le vecteur 'A' vaut '1'...
J'ai réalisé deux solutions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
ind = 1;
while( ( A( i ) ~= 1 ) & ( ind < n ) )
ind = ind + 1;
end
mini = B( ind );
ind = ind + 1;
for( i = ind : n )
if( A( i ) == 1 )
if( B( i ) < mini )
mini = B( i );
end
end
end |
Je recherche le premier indice du tableau 'A' qui vaut '1'. Puis j'initialise la valeur minimum 'mini' avec la valeur du tableau 'B' à cet indice. Ensuite, je parcours le tableau 'A' et à chaque fois que j'ai un '1', je vérifie si la valeur du tableau 'B' est inférieure à la valeur minimum 'mini'.
Code:
1 2 3 4 5 6 7 8 9 10
|
aTempVect = zeros( 1 , k );
j = 1;
for( i = 1 : n )
if( A( i ) == 1 )
aTempVect( j ) = B( i );
j = j + 1;
end
end
mini = min( aTempVect ); |
Je crée un vecteur temporaire 'aTempVect' de dimension le nombre 'k' de '1' du tableau 'A', puis je le remplis avec les valeurs du tableau 'B' dont les valeurs des indices valent '1' dans le tableau 'A'. Enfin j'utilise la fonction MATLAB 'min' au vecteur 'aTempVect'. La création de ce vecteur temporaire 'aTempVect' ne sert qu'à obtenir la valeur minimum grâce à la fonction 'min' MATLAB.
Comme les valeurs de 'n' et 'k' sont très importantes et que je ne connais pas l'algorithme MATLAB de la fonction 'min', je souhaite savoir laquelle des deux solutions se révèlera la plus rapide.
Merci beaucoup de vos réponses.