Skip to content

Instantly share code, notes, and snippets.

@ReRandom
Created December 29, 2016 18:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ReRandom/d559b16e95dfa5cb03744fd51bbc7f8c to your computer and use it in GitHub Desktop.
Save ReRandom/d559b16e95dfa5cb03744fd51bbc7f8c to your computer and use it in GitHub Desktop.
last lab
#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