Форум программистов, компьютерный форум CyberForum.ru

Время работы программы (алгоритма) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.88
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
15.09.2011, 14:30     Время работы программы (алгоритма) #1
не получается посчитать время работы алгоритма программы!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
 
void sort(int [],int);
void print(int [], int);
 
int main()
{
    int i,n;
    double s=1;
    srand(time(0));
 
    cout<<"Enter size of array: ";
    cin>>n;
 
    n=((n>0 && n<=100) ? n : 5);
 
    int *arr=new int [n-1];
 
    for(i=0;i<n;i++)
        arr[i]=1+rand()%20;
 
    print(arr,n);
    sort(arr,n);
    print(arr,n);
 
    for(i=1;i<n-1;i++)
        s=s*arr[i];
 
    cout<<"\nS = "<<s<<endl;
    return 0;
}
 
void sort(int a [],int size)
{
    int temp;
     for (int i = 0; i < size-1; i++) // Проход всего массива кроме последнего элемента
        for (int j = i + 1; j <= size-1; j++) // Проход оставшейся части массива
            if (a[i] > a[j])
            {
                // Сравнение текущего элемента с элементом из оставшейся части.
                temp = a[i]; // Обмен значений элементов если они стоят в неправильном порядке
                a[i] = a[j];
                a[j] = temp;
            }
}
 
void print(int b[], int x)
{
    cout<<endl;
 
    for(int i=0;i<x;i++)
        cout<<b[i]<<" ";
    cout<<endl;
}
пытаюсь посчитать через :

C++
1
2
3
4
5
    clock_t start,finish;
    start=clock();
    finish=clock();
    cout<<"\ntime=";
    cout<<(finish-start)/CLOCKS_PER_SEC<<endl;
но чет не получается,помогите кто знает!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 14:40     Время работы программы (алгоритма) #2
Что конкретно не получается?

Добавлено через 1 минуту
А и
Цитата Сообщение от vippi07 Посмотреть сообщение
C++
1
cout<<(finish-start)/CLOCKS_PER_SEC<<endl;
C++
1
cout<<(double)(finish-start)/CLOCKS_PER_SEC<<endl;
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
15.09.2011, 14:41     Время работы программы (алгоритма) #3
Цитата Сообщение от vippi07 Посмотреть сообщение
не получается посчитать время работы алгоритма программы!
Куча вариантов
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2011, 14:46     Время работы программы (алгоритма) #4
Цитата Сообщение от vippi07 Посмотреть сообщение
не получается посчитать время работы алгоритма программы!
- уже когда то рассматривался похожий топик (там считали за сколько времени 5 элементов массива выводятся), vippi07, касательно твоего алгоритма
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
 
void sort(int [],int);
void print(int [], int);
 
int main()
{
    time_t start;
    time_t end;
 
    int i,n;
    double s=1;
    srand(time(0));
 
    cout<<"Enter size of array: ";
    cin>>n;
 
    n=((n>0 && n<=100) ? n : 5);
 
    int *arr=new int [n-1];
    
    time(&start);
    tm * ptm = localtime(&start);
    printf("ALGORITHM START AT : %s\r\n",asctime(ptm));
    for(i=0;i<n;i++)
        arr[i]=1+rand()%20;
 
    print(arr,n);
    sort(arr,n);
    print(arr,n);
 
    for(i=1;i<n-1;i++)
        s=s*arr[i];
 
    cout<<"\nS = "<<s<<endl;
 
    time(&end);
    ptm = localtime(&end);
    printf("ALGORITHM ENDS AT : %s\r\n",asctime(ptm));
    printf("DIFERENTS IN CLOCKS_PER_SEC : %d\r\n",end - start);
    printf("NUM OPERATIONS / CLOCKS_PER_SEC %lf\r\n",1.0*(i + 2)/CLOCKS_PER_SEC);
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
 
void sort(int a [],int size)
{
    int temp;
    for (int i = 0; i < size-1; i++)        // Проход всего массива кроме последнего элемента
    for (int j = i + 1; j <= size-1; j++)   // Проход оставшейся части массива
        if (a[i] > a[j])
        {
            // Сравнение текущего элемента с элементом из оставшейся части.
            temp = a[i]; // Обмен значений элементов если они стоят в неправильном порядке
            a[i] = a[j];
            a[j] = temp;
        }
}
 
void print(int b[], int x)
{
    cout<<endl;
 
    for(int i=0;i<x;i++)
        cout<<b[i]<<" ";
    cout<<endl;
}
[Результат работы]
Enter size of array: 120
ALGORITHM START AT : Thu Sep 15 13:41:12 2011


6 5 9 14 18

5 6 9 14 18

S = 756
ALGORITHM ENDS AT : Thu Sep 15 13:41:12 2011

DIFERENTS IN CLOCKS_PER_SEC : 0
NUM OPERATIONS / CLOCKS_PER_SEC 0.006000
Press any key to continue
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.09.2011, 14:48     Время работы программы (алгоритма) #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
бери в работу
Не стоит. Работа потока программы может быть прервана другим потоком, в таком случае результаты будут не корректными. Учитывать нужно время выполнения только того потока, который выполняет интересующий алгоритм. clock подходит для решения этой задачи в однопоточном приложении, по крайней мере на Windows.
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2011, 14:50     Время работы программы (алгоритма) #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Не стоит. Работа потока программы может быть прервана другим потоком, в таком случае результаты будут не корректными. Учитывать нужно время выполнения только того потока, который выполняет интересующий алгоритм. clock подходит для решения этой задачи в однопоточном приложении, по крайней мере на Windows.
- уже исправил код и подогнал алгоритм под условие ТС
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
15.09.2011, 14:59  [ТС]     Время работы программы (алгоритма) #7
всем спасибо)))я просто тупанул))))нашел ошибку))все варианты нормально работают!!
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
27.09.2011, 09:53  [ТС]     Время работы программы (алгоритма) #8
к этой программке

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
 
void sort(int [],int);
void print(int [], int);
 
int main()
{
    int i,n;
     double s=1;
    srand(time(0));
 
    cout<<"Enter size of array: ";
    cin>>n;
 
    n=((n>0 && n<=100) ? n : 5);
 
    int *arr=new int [n-1];
    clock_t start,finish;
    start=clock();
    for(i=0;i<n;i++)
        arr[i]=1+rand()%20;
 
    print(arr,n);
    sort(arr,n);
    print(arr,n);
 
    for(i=1;i<n-1;i++)
        s=s*arr[i];
 
    cout<<"\nS = "<<s<<endl;
    finish=clock();
 
    cout<<(double)(finish-start)/CLOCKS_PER_SEC<<"c"<<endl;
    return 0;
}
 
void sort(int a [],int size)
{
    int temp;
     for (int i = 0; i < size-1; i++) // Проход всего массива кроме последнего элемента
        for (int j = i + 1; j <= size-1; j++) // Проход оставшейся части массива
            if (a[i] > a[j])
            {
                // Сравнение текущего элемента с элементом из оставшейся части.
                temp = a[i]; // Обмен значений элементов если они стоят в неправильном порядке
                a[i] = a[j];
                a[j] = temp;
            }
}
 
void print(int b[], int x)
{
    cout<<endl;
 
    for(int i=0;i<x;i++)
        cout<<b[i]<<" ";
    cout<<endl;
}
1)на основании математического анализа определить к какому классу эффективности относиться разработанный алгоритм в худшем случае
2) на основании эмпирического анализа определить к какому классу эффективности относиться разработанный алгоритм для среднего случая
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
04.10.2011, 09:10  [ТС]     Время работы программы (алгоритма) #9
help!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.10.2011, 12:28     Время работы программы (алгоритма) #10
1. O(N^2). Т.е. квадратичная зависимость от размера
2. Добавь в if счётчик и считай. Нужно сделать несколько прогонов на разных наборах данных. Чем больше прогонов, тем правдивее будет средний случай.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 08:35     Время работы программы (алгоритма)
Еще ссылки по теме:

Время работы программы C++
Как уменьшить время работы программы? C++
Рассчитать время работы программы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vippi07
26 / 23 / 1
Регистрация: 01.11.2009
Сообщений: 134
11.10.2011, 08:35  [ТС]     Время работы программы (алгоритма) #11
а можешь добавить счетчик ??
Yandex
Объявления
11.10.2011, 08:35     Время работы программы (алгоритма)
Ответ Создать тему
Опции темы

Текущее время: 11:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru