benreghaimehdi
-
Modifié par cptpingu le 13/04/2015 à 11:40
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
13 avril 2015 à 12:29
Bonjour,
J'ai un petit souci, je ne sais pas comment optimiser cette fonction en C :
void baseline(int n, double a[n], double b[n], double c[n])
{
int i, j;
for (j = 0; j < n; j++)
{
for (i = 0; i < n; i++)
{
c[i] += b[n - 1 - i];
if (i < j)
c[i] += a[j];
}
}
}
En fait, je me suis renseigné, en gros il faut remonter le "if" parce qu'il coûte cher, voir pour une optimisation idéale l'éliminer (le code doit toujours rester équivalent à celui de début).
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 13 avril 2015 à 12:29
Bonjour.
Difficile de t'aider sans te donner la solution :(. Sans entrer dans les détails, il faut effectivement virer le "if". Pour se faire, tu remplaces ta boucle + if, par deux boucles à la suite. La borne de fin et la borne de début de tes boucles qui remplacent ta boucle + if, sera la valeur de pivot qui est déjà utilisé dans ton if. Cette valeur, change à chaque tour de ta boucle principale (avec l'index j).
Le plus dur n'est pas de faire deux boucles, mais de trouver cette valeur. Je te laisse réfléchir un petit peu dessus.