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

Как замерить время работы функции? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разбить число на цифры при помощи цикла http://www.cyberforum.ru/cpp-beginners/thread563190.html
Как разбивать число на цифры, когда заведомо не известно сколько в этом числе будет цифр. Циклом? Задание: Пользователь вводит с клавиатуры число - программа должна показать сколько в данном числе цифр. Число вводится целиком в одну переменную. Примечание: Например, пользователь ввел число 12345. На экране должно появиться сообщение о том, что в числе 5 цифр. Когда заведомо известно...
C++ Таблица перевода миль в километры и обратно. Помогите решить задачу, нужно вывести на экран таблицу пересчета миль в км и обратно до заданного k км. Решение нужно без использования массивов, можно использовать цикл. Должно выводится на экран след. образом: Мили _______ Км 0,6214 ________ 1 1 __________ 1,6093 1,2428 ... http://www.cyberforum.ru/cpp-beginners/thread563186.html
C++ Бинарные деревья: создание, отображение, поиск узлов
Написать программу, которая выполняет следующие действия: 1. Генерирует с помощью генератора случайных чисел 10 символов латинского алфавита. 2. Из полученных символов строит упорядоченное бинарное дерево, отсортированный в заданном порядке в соответствии с направлением прохождения дерева. 3. Отображает полученное дерево на экране. 4. Осуществляет поиск среди элементов дерева значение...
Переставить в заданных порядках все элементы s-ой строки и k-ого столбца матрицы C++
Определить и протестировать класс CM, содержащий в качестве компонентов указатель на «динамический двумерный массив» (матрицу А) и его размеры (m-число строк и n число столбцов), а также конструктор для инициализации «массива» и методы для заданной обработки «динамического двумерного массива» - матрицы. Все компоненты должны иметь статус private. Элементы матрицы – вещественные числа от 0,001 до...
C++ Необходимо выбрать структуру (список, К-Ч дерево и т.д) для хранения данных http://www.cyberforum.ru/cpp-beginners/thread563163.html
Решил описать задачку здесь, может кому тоже интересно будет, такие не каждый день на выдумывание хитрых алгоритмов дают, это не скучная задачка вроде моих универовских "напиши односвязный список" да напиши класс студенты ... Советую дочитать до конца если вы тоже хотите по-выдумывать что-то хитрое, задание очень интересное :) Есть задачка. Смысл её в том что есть куча классов геом. фигур. У...
C++ Написать программу на с++, которая считывает текст из файла.. Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел. Что-то вот получилось,но не правильно работает) помогите пожалуйста #include <iostream.h> #include <stdio.h> #include <fstream.h> #include <stdio.h> #include <ctype.h> #include <conio.h> #include <string.h> подробнее

Показать сообщение отдельно
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
02.05.2012, 01:03  [ТС]     Как замерить время работы функции?
Я тут измерил время нахождения определителя методом конденсации Доджонса(1) и методом разложения по первой строке(2).
Для матрицы 9x9 у меня посчитало первым методом за 3.432 секунды, а вот вторым за 81.526. Процессор amd athlon 64 x2 4600+.
Время не слишком большое? Как думаете? Странно, что первый метод так быстро считает по сравнению со вторым, а второй так долго вообще.
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
73
74
75
76
#include <vector>
#include <iostream>
#include <windows.h>
 
void erase_irow_jcolomn( std::vector< std::vector< long double >>& matr, int i, int j )
{
    matr.erase( matr.begin() + i );
    for( size_t i = 0; i < matr.size(); ++i ) {
        matr.at( i ).erase( matr.at( i ).begin() + j );
    }
}
 
// метод конденсации Доджсона
long double determinant( std::vector< std::vector< long double >>& matr )
{
    if( matr.size() == 1 ) {
        return matr.at( 0 ).at( 0 );
    }
    if( matr.size() == 2 ) {
        return matr.at( 0 ).at( 0 ) * matr.at( 1 ).at( 1 ) - matr.at( 0 ).at( 1 ) * matr.at( 1 ).at( 0 );
    }
    auto matr1( matr );
    erase_irow_jcolomn( matr1, 0, 0 );
    auto matr2( matr );
    erase_irow_jcolomn( matr2, matr2.size() - 1, matr2.size() - 1 );
    auto matr3( matr );
    erase_irow_jcolomn( matr3, matr3.size() - 1, 0 );
    auto matr4( matr );
    erase_irow_jcolomn( matr4, 0, matr4.size() - 1 );
    auto matr5( matr );
    erase_irow_jcolomn( matr5, 0, 0 );
    erase_irow_jcolomn( matr5, matr5.size() - 1, matr5.size() - 1 );
 
    return ( determinant( matr1 ) * determinant( matr2 ) -
        determinant( matr3 ) * determinant( matr4 ) ) / determinant( matr5 );
}
 
// метод разложения по первой строке
long double determinant2( std::vector< std::vector< long double >>& matr )
{
    if( matr.size() == 1 ) {
        return matr.at( 0 ).at( 0 );
    }
 
    long double result = 0.0l;
    for( size_t i = 0; i < matr.size(); ++i ) {
        if( matr.at( 0 ).at( i ) != 0.0 ) {
            auto mtr = matr;
            erase_irow_jcolomn( mtr, 0, i );
            result += ( ( i % 2 == 0 ) ?  1 : -1 ) *
                matr.at( 0 ).at( i ) * determinant2( mtr );
        }
    }
    return result;
}
int main()
{
    int n = 9;
    std::vector< std::vector< long double >> matr( n,std::vector< long double >( n, 0.0l ) );
    for( size_t i = 0; i < matr.size(); ++i ) {
        for( size_t j = 0; j < matr.size(); ++j ) {
            matr[i][j] = rand();
        }
    }
 
    int start=GetTickCount();
    std::cout << determinant( matr ) << std::endl;
    int end=GetTickCount();
    std::cout << (end-start)/1000.0 << std::endl;
    start=GetTickCount();
    std::cout << determinant2( matr ) << std::endl;
    end=GetTickCount();
    std::cout << (end-start)/1000.0 << std::endl;
    std::cin.get();
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru