CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide pour algorithme somme tableau

FortCommeMeric
FortCommeMeric
Niveau 10
06 avril 2014 à 19:12:18

Bonjour,

Dans le cadre d'un exercice je dois trouver un algorithme qui calcule la somme des éléments entre deux indices d'un tableau de 100 000 entiers, et il y au pire 100 000 ce ces sommes à calculer.

J'ai déjà essayé l'algorithme "naif" http://pastebin.com/nFZEeBjY mais il est trop lent à trouver la solution lorsque le nombre de sommes devient grand. Donc il me faut un algorithme plus rapide, j'en ai déjà essayé 2 autres mais ils étaient encore plus lent... Maintenant je n'ai plus d'idées donc j'aurais besoin d'un indice sur le type d'algorithme à utiliser. Je sais qu'il est possible d'obtenir un algorithme beaucoup plus rapide que le "naif" car quand je compile mon programme avec l'option -O1 dans g++ le programme devient largement assez rapide pour résoudre l'exercice, mais je n'ai aucune idée de ce que fait g++ pour arriver à ce résultat.

Mjonir
Mjonir
Niveau 26
06 avril 2014 à 19:29:45

g++ ne fait aucune optimisation algorithmique. Au niveau du code source, tout ce que tu peux faire sans faire d'hypothèse sur ton architecture c'est de pré-calculer ta valeur d'arrêt (end-1) hors de la boucle, pour éviter qu'elle ne soit recalculée à chaque fois.

Ensuite le compilateur peut faire beaucoup de choses sympa à l'optimisation, notamment du loop-unrolling, des indices de branch-prediction, une meilleure utilisation du cache ou encore de l'utilisation d'instructions particulières de ton CPU permettant de traiter plusieurs données d'un coup. Ce sont des choses dont tu ne devrais pas vraiment te soucier au niveau du programme lui-même.

Ton programme est taggé comme C++, mais est presque entièrement codé en pur C. Si par contre tu comptes utiliser des fonctionnalités C++, la meilleure solution est de mettre des données dans un std::valaray et utiliser std::valarray::sum:

http://www.cplusplus.com/reference/valarray/valarray/sum/

FortCommeMeric
FortCommeMeric
Niveau 10
06 avril 2014 à 19:42:36

J'ai écris une nouvelle fonction sum qui utilise valarray : http://pastebin.com/3bKj26pe

Mais le programme est deux fois plus lent qu'avant.

Merci de m'aider en tout cas

Pseudo supprimé
Pseudo supprimé 06 avril 2014 à 19:49:16

-O1 élimine l'utilisation outrancière de la pile.

http://goo.gl/690QaG
http://goo.gl/xZkP8y

FortCommeMeric
FortCommeMeric
Niveau 10
06 avril 2014 à 20:07:09

J'ai trouvé la solution en fait, il fallait utiliser un tableau cumulatif :-p http://pastebin.com/pUEmB33i

merci elite_2009 pour ce site :bave:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment