Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Mierzenie czasu wykonywania algorytmu

Ostatnio zmodyfikowano 2014-06-03 22:46
Autor Wiadomość
Mutiny
Temat założony przez niniejszego użytkownika
Mierzenie czasu wykonywania algorytmu
» 2014-06-02 21:59:24
Witam, chcę zmierzyć czas sortowania dwóch tablic ale coś chyba jest nie tak, mam na myśli czas pokazywany, jest stanowczo za krótki. Będę wdzięczny za pomoc
C/C++
#include <stdio.h>
#include <time.h>
int n = 20000;
int tab[ 20000 ];
int tab2[ 20000 ];
void wypelnij()
{
    int i = 0;
    for( i = 0; i < n; i++ )
    {
        tab[ i ] = rand();
        tab2[ i ] = tab[ i ];
        //printf("%d\n",tab[i]);
    }
}
int bubble( int tab2[], int n );
void Sortuj_szybko( int lewy, int prawy );
int main()
{
    clock_t start;
    clock_t end1;
    clock_t start2;
    clock_t end2;
    wypelnij();
   
    start = clock();
    Sortuj_szybko( 0, n - 1 );
    end1 = clock();
    start2 = clock();
    bubble( tab, n );
    end2 = clock();
   
    printf( "czas szybkiego %ld",( end1 - start ) );
    printf( "czas babelkowoego %ld",( end2 - start2 ) );
   
   
   
    //return (0);
}
P-111332
PaSaSaP
» 2014-06-02 22:31:51
20000 elementów to nie jest tak dużo elementów jak na dzisiejsze komputery. Dla 20 milionów elementów spróbuj. Inna sprawa, to styl, w jakim piszesz, nie podoba mi się. Zmienne globalne nie są dobrym rozwiązaniem. Wartość, która jest stała przez cały czas działania programu możesz zdefiniować dyrektywą define, np.: #define ROZMIAR 20000.
P-111334
Mutiny
Temat założony przez niniejszego użytkownika
» 2014-06-02 23:30:43
Mój błąd nie napisałem jak za mało, mianowicie : 3
Za to samo wypisanie tej tablicy daje nam czas około 1000.
Co do samej maniery pisania, uczę się i dziękuję za porady :)
Skoro w programie nie modyfikuje i tak zmiennej n długość, to pisanie define tudzież const int ma jakiś cel poza trzymaniem się konwencji, że stałe mają być stałe ?
http://i.imgur.com/YOcIsnf.png fotka z tym co dostajemy w konsoli
Wersja po poprawkach sugerowanych :
C/C++
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
const int n = 20000;


int bubble( int tab2[], int n );
void Sortuj_szybko( int lewy, int prawy, int tab[] );
int main()
{
    int tab[ 20000 ];
    int tab2[ 20000 ];
    int j = 0;
    for( j = 0; j < n; j++ ) //wypelnianie pseudolosowymi liczbami
    {
        tab[ j ] = rand();
        tab2[ j ] = tab[ j ];
       
    }
    clock_t start;
    clock_t end;
    clock_t start2;
    clock_t end2;
    clock_t start3;
    clock_t end3;
   
    start = clock();
    Sortuj_szybko( 0, n - 1, tab );
    end = clock();
    start2 = clock();
    bubble( tab2, n );
    end2 = clock();
   
   
    int i = 0;
    start3 = clock();
    for( i = 0; i < n; i++ )
    {
        printf( "%d\n", tab[ i ] );
    }
    end3 = clock();
   
    printf( "czas szybkiego %ld",( end - start ) );
    printf( "czas babelkowoego %ld",( end2 - start2 ) );
    printf( "czas wypisania posortowanej tablicy %ld",( end3 - start3 ) );
   
   
   
    return( 0 );
}
P-111337
Mutiny
Temat założony przez niniejszego użytkownika
» 2014-06-03 15:59:57
Edit:
chyba jednak tak musi być, pod linuxem to samo odpaliłem i wyniki inne - większe liczby spoooro, wcześniej używałem clock() właśnie na linuxie i dla tego się dziwiłem, ale wciąż zastanawia mnie czemu wypisanie na ekran to 1000 a sortowanie szybkie 3 przy 20000 elementów. Czyżby wypisywanie było tak zajmujące dla procesora ?
P-111354
pekfos
» 2014-06-03 22:46:03
clock() nie musi dawać żadnej konkretnej jednostki, więc skąd wiecie, czy n to dużo, czy mało..? Co do 3, a 1000, to może być wina kodu i tego, że skompilowany program nie musi być dosłowną realizacją kodu.
P-111384
« 1 »
  Strona 1 z 1