calcul du temps d'exécution en c++

j'ai écrit un programme c++, je veux savoir comment calculer le temps d'exécution pour ne pas dépasser la limite de temps.

#include<iostream>

using namespace std;

int main ()
{
    int st[10000],d[10000],p[10000],n,k,km,r,t,ym[10000];
    k=0;
    km=0;
    r=0;
    scanf("%d",&t);
    for(int y=0;y<t;y++)
    {
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
            cin>>st[i] >>d[i] >>p[i];
    }
    for(int i=0;i<n;i++)
    {
            for(int j=i+1;j<n;j++)
            {
                    if((d[i]+st[i])<=st[j])
                    {
                              k=p[i]+p[j];
                    }
                    if(k>km)
                    km=k;
            }
        if(km>r)
        r=km;
    }
    ym[y]=r;
}
    for( int i=0;i<t;i++)
    {
         cout<<ym[i]<<endl;
    }


    //system("pause");
    return 0;
}     

c'est mon programme et je veux qu'il soit dans le délai de 3 secondes !! comment faire ? oui désolé je voulais dire le temps d'exécution !!

23
demandé sur Meysam 2009-05-18 13:37:27

7 réponses

si vous avez cygwin installé, à partir de son shell bash, lancez votre exécutable, dites MyProgram, en utilisant le time utilitaire, comme suit:

/usr/bin/time ./MyProgram

rapport combien de temps l'exécution de votre programme-la sortie devrait ressembler à quelque chose comme ce qui suit:

real    0m0.792s
user    0m0.046s
sys     0m0.218s

vous pouvez aussi modifier manuellement votre programme C pour l'instrumenter en utilisant le clock() fonction de bibliothèque, comme ceci:

#include <time.h>
int main(void) {
    clock_t tStart = clock();
    /* Do your stuff here */
    printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
    return 0;
}
87
répondu Ashutosh Mehra 2009-05-18 10:44:27

OVERVIEW

j'ai écrit un hack sémantique simple pour ceci en utilisant @AshutoshMehraréponse. Votre code est très lisible de cette façon!

MACRO

#include <time.h>

#ifndef SYSOUT_F
#define SYSOUT_F(f, ...)      _RPT1( 0, f, __VA_ARGS__ ) // For Visual studio
#endif

#ifndef speedtest__             
#define speedtest__(data)   for (long blockTime = NULL; (blockTime == NULL ? (blockTime = clock()) != NULL : false); SYSOUT_F(data "%.9fs", (double) (clock() - blockTime) / CLOCKS_PER_SEC))
#endif

USAGE

speedtest__("Block Speed: ")
{
    // The code goes here
}

sortie

Block Speed: 0.127000000s
13
répondu bluejamesbond 2014-01-24 07:46:15

Note: la question portait à l'origine sur le temps de compilation, mais plus tard il s'est avéré que L'OP signifiait réellement le temps d'exécution. Mais peut-être que cette réponse sera encore utile pour quelqu'un.

pour Visual Studio: aller à Tools / Options / Projects and Solutions / VC++ Project Settings et définissez Build Timing optionyes'. Après que le temps de chaque version sera affiché dans la fenêtre de Sortie.

8
répondu Alex Jenter 2009-05-18 10:59:24

Avec C++11 pour mesurer le temps d'exécution d'un morceau de code, on peut utiliser la fonction now ():

auto start = chrono::steady_clock::now();

//  Insert the code that will be timed

auto end = chrono::steady_clock::now();

// Store the time difference between start and end
auto diff = end - start;

si vous voulez imprimer le décalage horaire entre le début et la fin dans le code ci-dessus, vous pouvez utiliser:

cout << chrono::duration <double, milli> (diff).count() << " ms" << endl;

Si vous préférez utiliser la nanoseconde, vous allez utiliser:

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;

la valeur de la variable diff peut aussi être tronquée à une valeur entière, par exemple, si vous voulez que le résultat soit exprimé comme:

diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff);
cout << diff_sec.count() << endl;

pour plus d'information cliquez sur ici

6
répondu Sajal 2017-12-19 13:27:00

cela ressemble à l'algorithme de Dijstra. Dans tous les cas, le temps d'exécution dépendra de N. Si cela prend plus de 3 secondes, il n'y a aucun moyen que je puisse voir pour l'accélérer, car tous les calculs qu'il fait doivent être faits.

selon le problème que vous essayez de résoudre, il pourrait y avoir un algorithme plus rapide.

1
répondu pjc50 2009-05-18 13:01:28

toutes les durées d'exécution apparaissent comme 0 ou 0,001. Qui pourraient être droit, mais est-il possible pour elle de 0 secondes?

0
répondu user977154 2011-12-03 18:04:40

j'ai utilisé la technique dit ci-dessus, encore, j'ai trouvé que le temps donné dans le Code: Blocks IDE a été plus ou moins similaire au résultat obtenu(peut-être que ce sera différent par peu de micro secondes)..

0
répondu ejjyrex 2013-04-08 04:07:42