Grafalgo
Library of useful data structures and algorithms
|
00001 #include "stdinc.h" 00002 #include <list> 00003 #include "Util.h" 00004 00005 void perfTest(int n) { 00006 list<int> lst(n); 00007 int perm[n+1]; 00008 Util::genPerm(n,perm); 00009 00010 cout << "perfTest " << n << endl; 00011 00012 uint32_t t0 = Util::getTime(); 00013 for (int i = 1; i <= n; i++) lst.push_back(i); 00014 uint32_t t1= Util::getTime(); 00015 double addBack = ((double) t1 - (double) t0)/n; 00016 cout << "appending to end: " << addBack << " us per operation\n"; 00017 00018 t0= Util::getTime(); 00019 for (int i = 1; i <= n; i++) lst.pop_front(); 00020 t1= Util::getTime(); 00021 double removeFront = ((double) t1 - (double) t0)/n; 00022 cout << "removing from front: " << removeFront << " us per operation\n"; 00023 00024 t0 = Util::getTime(); 00025 for (int i = 1; i <= n; i++) lst.push_back(perm[i]); 00026 t1= Util::getTime(); 00027 double addBackRand = ((double) t1 - (double) t0)/n; 00028 cout << "appending to end in random order: " << addBack 00029 << " us per operation\n"; 00030 00031 t0= Util::getTime(); 00032 for (int i = 1; i <= n; i++) lst.pop_front(); 00033 t1= Util::getTime(); 00034 removeFront = ((double) t1 - (double) t0)/n; 00035 cout << "removing from front: " << removeFront << " us per operation\n"; 00036 00037 list<int>::iterator p; 00038 if (n <= 10000) { 00039 for (int i = 1; i <= n; i++) lst.push_back(perm[i]); 00040 t0= Util::getTime(); 00041 for (int i = 1; i <= n; i++) { lst.remove(i); } 00042 t1= Util::getTime(); 00043 double removeByValue = ((double) t1 - (double) t0)/n; 00044 cout << "removing by value: " << removeByValue 00045 << " us per operation\n"; 00046 } 00047 00048 for (int i = 1; i <= n; i++) lst.push_back(perm[i]); 00049 int sum = 0; 00050 t0= Util::getTime(); 00051 for (p = lst.begin(); p != lst.end(); p++) sum += *p; 00052 t1= Util::getTime(); 00053 double sumInOrder = ((double) t1 - (double) t0)/n; 00054 cout << "summing in order: " << sumInOrder << " us per operation " 00055 << sum << "\n"; 00056 00057 cout << endl; 00058 } 00059 00060 main() { 00061 perfTest(100); 00062 perfTest(1000); 00063 perfTest(10000); 00064 perfTest(100000); 00065 perfTest(1000000); 00066 }