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

Besoin d'optimisation d'algorithme

Ptival
Ptival
Niveau 10
06 juin 2005 à 22:43:57

Je dois renvoyer le 2nd plus grand nombre d´une chaîne de N nombres...
J´ai fais deux algos qui marchent, mais les deux sont trop lents. Je n´arrive pas à optimiser plus que le second :\

Si vous pouviez me donner des pistes...(ou la réponse :p) ce serait cool

Les deux algos que j´ai faits pour l´instant :

http://www.rafb.net/paste/results/QEA8hu96.html

PS : En cas d´égalité entre deux nombres au premier rang, on renvoie ce nombre.

dnob700
dnob700
Niveau 10
06 juin 2005 à 23:12:55

d´un point de vue algorithmique on peut pas faire mieux que ta deuxième version puice qu´elle ne lit qu´une fois chaque nombre ( remplace juste les deux test par des > plutot que des > = pour économiser des affectation) et que tu es bien obligé de le faire.

donc a par cette petite optimisation, ej pense pas qu´on puisse faire beaucoup mieux.

lag-it
lag-it
Niveau 10
06 juin 2005 à 23:13:30

J´ai fait une légère amélioration de la 2ème version ( la 1ère étant mauvaise avec ses 2 boucles for :) ) :

http://www.rafb.net/paste/results/3NjrHL21.html

Le truc, c´est que je n´effectue qu´un seul test par tour de boucle dans le cas où tablo[i] est inférieur au 2 ème plus grand ( dans ce cas, toi tu testai quand même les 2 valeurs, alors que si il est plus petit que le second plus grand, il est forcément plus petit que le premier plus grand :) )

C´est à mon avis la meilleure version possible :

Tu utilises un tableau apparement non trié, donc tu est obligé de le parcourir intégralement. En outre, tu est obligé d´avoir une comparaison ( ou 2 selon le cas) par tour de boucle...

Si tu veux encore améliorer les perfs, construit ton tableau de telle sorte qu´il soit trié et changer d´algo, mais bon ceci dit quand tu dis " trop lent", c´est une blague ???
Parce qu´à moins d´avoir un tableau de milliards d´éléments ( et le pc avec la ram qui va avec :) ) , ton ordi doit être parfaitement capable d´effectuer 2*size comparaisons ( une pour le for et une pour le second plus grand) + quelques comparaison pour le plus grand en un fraction de seconde...

Ptival
Ptival
Niveau 10
06 juin 2005 à 23:21:54

Là où j´en suis arrivé c´est ça :

http://www.rafb.net/paste/results/xCiu7d27.html

Mais le problème de temps, c´est que c´est un exo de Prologin, et le serveur me renvoie :

Echec : Votre programme a dépassé la limite de temps autorisée

lag-it
lag-it
Niveau 10
06 juin 2005 à 23:24:40

Essaye ma version : il n´y a qu´une seule comparaison par tour de boucle.
Et puis c´est normal que ca prenne un temps fou si tu places un cin en plein milie de ta boucle...

Ptival
Ptival
Niveau 10
07 juin 2005 à 01:21:19

Je récupère comment toutes mes entrées si je fais pas mes cin . ..??? -__________-

MrGoTo
MrGoTo
Niveau 8
07 juin 2005 à 01:24:39

Personnelement pour cet exo j´ai fait un tri à bulle ou je m´arrete à la seconde itération et ça marche du tonnerre !

Ptival
Ptival
Niveau 10
07 juin 2005 à 11:06:56

Problème résolu !

En fait c´était la faute à cin, qui est plus lent que scanf...

lag-it
lag-it
Niveau 10
07 juin 2005 à 14:02:10

" Je récupère comment toutes mes entrées si je fais pas mes cin . . .??? -_____-"

Tu le mets surtout pas dans ta boucle, enfin !
Avant de chercher la petite bête à optimiser les tests de boucles et la traduction de ton algo, il faudrait peut être commencer par écrire un algo bien concu : Tu commences par récupérer toutes les valeurs du tableau et ensuite tu le passes à ta fonction qui te retourne les 2 ème plus grand, c´est tout.

dnob700
dnob700
Niveau 10
07 juin 2005 à 16:18:36

poru le cin je suis pas d´accord il faut le faire de toute manière.

par contre cin est notoirement plus lent que scanf, donc essaye de le remplacer par scanf.

Ensuite comme de toute manière il faut lire les entré que tu fasse une boucle à part ou non d´après moi ça ne change pas grand chose, ce qui montre bien que le temps de calcul devant celui de la lecture est négligeable.

lag-it
lag-it
Niveau 10
07 juin 2005 à 20:01:23

Ah oui j´avais pas fait gaffe qu´il avait carrément supprimé sa procédure préceédente ( je croyais qu´il reremplissait un tableau rempli passé en argument).
Bon ceci dit point de vue conception, il serait plus joli de sortir le cin de la boucle ( et créer une procédure pour la recherche du second plus grand)...

MrGoTo
MrGoTo
Niveau 8
07 juin 2005 à 20:40:11

Ensuite cout par rapport à printf la différenec est plus enorme que cin à scanf. Sur un algo que j´avais fait j´affichais environ 100 000 trucs et je depassais la seconde avec le cout tandis qu´avec le printf je tenais en dessous de 0.25s.

Ptival
Ptival
Niveau 10
08 juin 2005 à 09:15:40

Comme me disait qqn sur IRC, la puissance se paye :)

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