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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 );
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.
Partager