Pergunta

Eu escrevi um programa c ++, eu quero saber como calcular o tempo necessário para a execução, então eu não excederá o limite de tempo.

#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 é o meu programa e eu quero que seja dentro do tempo limite de 3 segundos !! como fazer isso ? sim desculpe eu quis dizer o tempo de execução !!

Foi útil?

Solução

Se você tem o cygwin instalado, a partir dele do shell bash, execute o executável, dizem MyProgram, usando o utilitário time, assim:

/usr/bin/time ./MyProgram

Isto irá informar quanto tempo a execução do seu programa levou - a saída seria algo parecido com o seguinte:

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

Você também pode modificar manualmente o seu programa C para o instrumento-lo usando a função da biblioteca clock(), assim:

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

Outras dicas

Com C ++ 11 para medir o tempo de execução de um pedaço de código, podemos usar a função 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;

Se você quiser imprimir a diferença de tempo entre início e fim no código acima, você poderia usar:

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

Se você preferir usar nanosegundos, você vai usar:

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

O valor da variável diff pode ser também truncado para um valor inteiro, por exemplo, se você deseja que o resultado expresso como:

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

Para mais informações clique aqui

Visão geral

Eu escrevi um hack semântica simples para isso usando @AshutoshMehraresponse. -Lhe olhares de código realmente legível desta forma!

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

Utilização

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

OUTPUT

Block Speed: 0.127000000s

Nota: a questão era originalmente sobre o tempo de compilação, mas mais tarde descobriu-se que o OP realmente significava tempo de execução. Mas talvez esta resposta ainda será útil para alguém.

Para Visual Studio: ir opção Tools / Options / Projects and Solutions / VC++ Project Settings Build Timing e pronto para a 'yes'. Depois que o tempo de cada compilação será exibido na janela de saída.

Este parece ser o algoritmo de Dijstra. Em qualquer caso, o tempo gasto para executar dependerá N. Se demorar mais de 3 segundos não há nenhuma maneira que eu posso ver de acelerando-a, como todos os cálculos que está fazendo necessidade de ser feito.

Dependendo do que problema você está tentando resolver, pode haver um algoritmo mais rápido.

Eu tenho usado a técnica disse acima, ainda descobri que o período indicado na Código: Blocos IDE foi mais ou menos semelhante ao resultado obtained- (pode ser que será diferente a pouco micro segundos) ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top