Optimisation de boucle en c [Résolu]

-
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).


Merci pour votre aide.

Bonne journée.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
164
0
Merci
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.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.