Grafalgo
Library of useful data structures and algorithms
|
00001 #include "stdinc.h" 00002 #include "TreeMap.h" 00003 #include "Util.h" 00004 00005 void basicEval(int n) { 00006 int t1, t2; 00007 TreeMap map(n); 00008 int *perm = new int[2*n+1]; 00009 Util::genPerm(2*n,perm); 00010 00011 cout << "putting in random order: "; 00012 t1 = Util::getTime(); 00013 for (int i = 1; i <= n; i++) { 00014 map.put(perm[i],i); 00015 } 00016 t2 = Util::getTime(); 00017 cout << t2-t1 << " " << ((double) (t2-t1))/n << endl; 00018 00019 cout << "getting in reverse random order (hits): "; 00020 t1 = Util::getTime(); 00021 for (int i = 1; i <= n; i++) { 00022 map.get(perm[(n+1)-i]); 00023 } 00024 t2 = Util::getTime(); 00025 cout << t2-t1 << " " << ((double) (t2-t1))/n << endl; 00026 00027 cout << "getting in random order (misses): "; 00028 t1 = Util::getTime(); 00029 for (int i = n+1; i <= 2*n; i++) { 00030 map.get(perm[i]); 00031 } 00032 t2 = Util::getTime(); 00033 cout << t2-t1 << " " << ((double) (t2-t1))/n << endl; 00034 00035 cout << "remapping existing pairs: "; 00036 t1 = Util::getTime(); 00037 for (int i = 1; i <= n; i++) { 00038 map.put(perm[i],-i); 00039 } 00040 t2 = Util::getTime(); 00041 cout << t2-t1 << " " << ((double) (t2-t1))/n << endl; 00042 00043 cout << "remove/put pairs: "; 00044 t1 = Util::getTime(); 00045 for (int i = 1; i <= n; i++) { 00046 map.remove(perm[i]); 00047 map.put(perm[i+n],i+n); 00048 } 00049 t2 = Util::getTime(); 00050 cout << t2-t1 << " " << ((double) (t2-t1))/n << endl; 00051 } 00052 00053 00054 main() { 00055 int n = 1000; 00056 cout << "n=" << n << endl; 00057 basicEval(n); 00058 00059 n = 2000; 00060 cout << "n=" << n << endl; 00061 basicEval(n); 00062 00063 n = 4000; 00064 cout << "n=" << n << endl; 00065 basicEval(n); 00066 00067 n = 10000; 00068 cout << "n=" << n << endl; 00069 basicEval(n); 00070 00071 n = 20000; 00072 cout << "n=" << n << endl; 00073 basicEval(n); 00074 00075 n = 40000; 00076 cout << "n=" << n << endl; 00077 basicEval(n); 00078 00079 n = 100000; 00080 cout << "n=" << n << endl; 00081 basicEval(n); 00082 00083 n = 200000; 00084 cout << "n=" << n << endl; 00085 basicEval(n); 00086 00087 n = 400000; 00088 cout << "n=" << n << endl; 00089 basicEval(n); 00090 00091 n = 1000000; 00092 cout << "n=" << n << endl; 00093 basicEval(n); 00094 }