Created
December 29, 2016 18:57
-
-
Save ReRandom/d559b16e95dfa5cb03744fd51bbc7f8c to your computer and use it in GitHub Desktop.
last lab
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <map> | |
#include <list> | |
#include <algorithm> | |
#include <cmath> | |
#include <ctime> | |
#include <unistd.h> | |
#include <sys/resource.h> | |
#include <sys/times.h> | |
#include "Matrix.h" | |
double getCPUTime( ) | |
{ | |
#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) | |
{ | |
clockid_t id; | |
struct timespec ts; | |
#if _POSIX_CPUTIME > 0 | |
if( clock_getcpuclockid(0, &id) == -1) | |
#endif | |
#if defined(CLOCK_PROCESS_CPUTIME_ID) | |
id = CLOCK_PROCESS_CPUTIME_ID; | |
#elif defined(CLOCK_VIRTUAL) | |
id = CLOCK_VIRTUAL; | |
#else | |
id = (clockid_t)-1; | |
#endif | |
if(id != (clockid_t)-1 && clock_gettime(id, &ts) != -1) | |
return (double) ts.tv_sec + (double)ts.tv_nsec / 10000000000.0; | |
} | |
#endif | |
#if defined(RUSAGE_SELF) | |
{ | |
struct rusage rusage; | |
if(getrusage(RUSAGE_SELF, &rusage) != -1) | |
return (double)rusage.ru_utime.tv_sec + (double)rusage.ru_utime.tv_sec / 1000000.0; | |
} | |
#endif | |
return -1; | |
} | |
#define CALC_TIME getCPUTime() - delta | |
/* | |
* добавление, удаление, поиск, сортировка. | |
*/ | |
using namespace std; | |
int main() | |
{ | |
cout << "работа с int" << endl; | |
{ | |
multimap<unsigned int, int> a; | |
list<int> b; | |
unsigned int i = 0; | |
double delta; | |
cout << " Добавление элементов в multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10000000; ++i) | |
a.insert(pair<unsigned int, int>(i, rand() % 1000)); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Добавление элементов в list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10000000; ++i) | |
b.push_back(rand() % 1000); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Сортировка элементов в multimap" << endl; | |
delta = getCPUTime(); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Сортировка элементов в list" << endl; | |
delta = getCPUTime(); | |
b.sort(); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Поиск элементов в multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10; ++i) | |
a.find(rand() % 10000000); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Поиск элементов в list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10; ++i) | |
{ | |
int t = rand() % 10000000; | |
for(auto j = b.begin(); j != b.end(); j++) | |
if(*j == t) | |
break; | |
} | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Удаление элементов из multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10000000/2; ++i) | |
a.erase(a.begin()); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Удаление элементов из list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10000000/2; ++i) | |
b.erase(b.begin()); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
} | |
cout << endl << "работа с Matrix" << endl; | |
{ | |
multimap<unsigned int, Matrix> a; | |
list<Matrix> b; | |
unsigned int i = 0; | |
double delta; | |
cout << " Добавление элементов в multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 100; ++i) | |
{ | |
Matrix mm = Matrix(10, 10); | |
mm.randomize(100); | |
a.insert(pair<unsigned int, Matrix>(i, mm)); | |
} | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Добавление элементов в list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 100; ++i) | |
{ | |
Matrix mm = Matrix(10, 10); | |
mm.randomize(100); | |
b.push_back(mm); | |
} | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Сортировка элементов в multimap" << endl; | |
delta = getCPUTime(); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Сортировка элементов в list" << endl; | |
delta = getCPUTime(); | |
b.sort(); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Поиск элементов в multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10; ++i) | |
a.find(rand() % 100); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Поиск элементов в list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 10; ++i) | |
{ | |
unsigned int t = rand() % 100; | |
for(auto j = b.begin(); j != b.end(); j++) | |
if(!t--) | |
break; | |
} | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Удаление элементов из multimap" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 100; ++i) | |
a.erase(a.begin()); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
cout << " Удаление элементов из list" << endl; | |
delta = getCPUTime(); | |
for(i = 0; i < 100; ++i) | |
b.erase(b.begin()); | |
delta = CALC_TIME; | |
cout << " время: " << delta << endl; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment