Pregunta

He escrito un programa en C ++, quiero saber cómo calcular el tiempo necesario para su ejecución, así que no exceda el límite de tiempo.

#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;
}     

Este es mi programa y yo quiero que sea dentro del tiempo límite de 3 seg !! cómo hacerlo ? Sí lo siento, quería decir el tiempo de ejecución !!

¿Fue útil?

Solución

Si ha instalado cygwin, desde su shell bash, ejecute el ejecutable, por ejemplo MyProgram, mediante la utilidad time, así:

/usr/bin/time ./MyProgram

Esta informará cuánto tiempo la ejecución de su programa tomó - la salida sería algo como lo siguiente:

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

También puede modificar manualmente el programa de C para instrumento que utiliza la función de biblioteca clock(), así:

#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;
}

Otros consejos

Con C ++ 11 para medir el tiempo de ejecución de una pieza de código, podemos utilizar la función ahora ():

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 desea imprimir la diferencia de tiempo entre el inicio y el final en el código anterior, se puede usar:

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

Si usted prefiere utilizar nanosegundos, que va a utilizar:

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

El valor de la variable diff puede también trunca a un valor entero, por ejemplo, si desea que el resultado expresado como:

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

Para obtener más información, haga clic aquí

RESUMEN

He escrito un simple truco semántico para esta usando @AshutoshMehraresponse. Usted código es muy legible de esta manera!

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

uso

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

SALIDA

Block Speed: 0.127000000s

Nota: la cuestión era originalmente el tiempo de compilación, pero más tarde se descubrió que el PO en realidad quería decir el tiempo de ejecución. Pero tal vez esta respuesta todavía será útil para alguien.

Para Visual Studio: ir a Tools / Options / Projects and Solutions / VC++ Project Settings y la opción Build Timing a 'yes' set. Después de que el tiempo de cada generación se mostrará en la ventana de resultados.

Esto se ve como el algoritmo de Dijstra. En cualquier caso, el tiempo necesario para ejecutar dependerá de N. Si se tarda más de 3 segundos no hay ninguna manera de que pueda ver de acelerarlo, como todos los cálculos que se está haciendo necesidad de hacer.

Dependiendo de qué problema que estamos tratando de resolver, puede haber un algoritmo más rápido.

I han utilizado la técnica dijo anteriormente, todavía me encontré con que el tiempo dado en el Código: Bloques IDE era más o menos similar al resultado obtained- (puede ser que será diferente a poco micro segundos) ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top