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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | /* SMART Linked-list vs "normal" linked-list vs Vector. 15seconds maximum run-time Linear search and sorted insertion. std::list remembers last position to minimize overhead in traversing the list.*/ #include <list> #include <vector> #include <iostream> #include <iomanip> #include <random> #include <functional> #include <iostream> #include <chrono> #include <string> #include <numeric> #include <algorithm> #include <cassert> namespace g2 { typedef std::chrono::high_resolution_clock clock; typedef std::chrono::microseconds microseconds; typedef std::chrono::milliseconds milliseconds; clock::time_point now(){return clock::now();} microseconds intervalUs(const clock::time_point& t1, const clock::time_point& t0) {return std::chrono::duration_cast<microseconds>(t1 - t0);} milliseconds intervalMs(const clock::time_point& t1,const clock::time_point& t0) {return std::chrono::duration_cast<milliseconds>(t1 - t0);} class StopWatch { clock::time_point start_; public: StopWatch() : start_(clock::now()){} clock::time_point restart() { start_ = clock::now(); return start_;} microseconds elapsedUs() { return intervalUs(now(), start_);} milliseconds elapsedMs() {return intervalMs(now(), start_);} }; } // g2 typedef unsigned int Number; typedef std::list<Number> NumbersInList; typedef std::vector<Number> NumbersInVector; typedef long long int TimeValue; /* // Lambda expression for generating a random number using the 'mersenne twister distribution' // http://en.wikipedia.org/wiki/Mersenne_twister auto random_int = [&](const Number& low, const Number& high) -> Number { std::uniform_int_distribution<int> distribution(low, high); std::mt19937 engine((unsigned int)time(0)); // Mersenne twister MT19937 auto generator = std::bind(distribution, engine); return generator(); }; */ // Random integer function from http://www2.research.att.com/~bs/C++0xFAQ.html#std-random int random_int(int low, int high) { using namespace std; static default_random_engine engine {}; typedef uniform_int_distribution<int> Distribution; static Distribution distribution {}; return distribution(engine, Distribution::param_type{low, high}); } // Use a template approach to use functor, function pointer or lambda to insert an // element in the input container and return the "time result". // Search is LINEAR. Elements are insert in SORTED order template<typename Container> void linearInsertion(const NumbersInVector& numbers, Container& container) { std::for_each(numbers.begin(), numbers.end(), [&](const Number& n) { auto itr = container.begin(); for (; itr!= container.end(); ++itr) { if ((*itr) >= n) { break; } } container.insert(itr, n); }); } namespace{ // A little bit smarter --- remembers the last insertion point's position and can // start from that if wanted-position is >= last-position: this is calculated from the values // and not from the absolute positions TimeValue linearSmartInsertPerformance(const NumbersInVector& numbers, NumbersInList& container) { g2::StopWatch watch; auto last_inserted_value = 0; auto last_iter_position = container.begin(); std::for_each(numbers.begin(), numbers.end(), [&](const Number& n) { auto itr = container.begin(); if(n >= last_inserted_value) { itr = last_iter_position; } for (; itr!= container.end(); ++itr) { if ((*itr) >= n) { break; } } last_iter_position = container.insert(itr, n); last_inserted_value = n; }); auto time = watch.elapsedUs().count(); return time; } } // anonymous namespace // Measure time in milliseconds for linear insert in a std container template<typename Container> TimeValue linearInsertPerformance(const NumbersInVector& randoms, Container& container) { g2::StopWatch watch; linearInsertion(std::cref(randoms), container); auto time = watch.elapsedUs().count(); return time; } void listVsVectorLinearPerformance(size_t nbr_of_randoms) { // Generate n random values and push to storage NumbersInVector values(nbr_of_randoms); std::for_each(values.begin(), values.end(), [&](Number& n) { n = random_int(0, nbr_of_randoms -1);}); //print_distribution(values); TimeValue smarter_list_time; TimeValue list_time; TimeValue vector_time; std::cout << nbr_of_randoms << ",\t" << std::flush; { // force local scope - to clear up the containers at exit NumbersInList list; smarter_list_time = linearSmartInsertPerformance(values, list); } { NumbersInList list; list_time = linearInsertPerformance(values, list); } { NumbersInVector vector; vector_time = linearInsertPerformance(values, vector); std::cout << " " << ", "; } std::cout << smarter_list_time << ", " << list_time << ", " << vector_time << std::endl << std::flush; } int main(int argc, char** argv) { std::cout << "\n\n********** Times in microseconds**********" << std::endl; std::cout << "Elements ADD (Smarter-List, List, Vector)" << std::endl; g2::StopWatch watch; // only 15seconds available, therefore the short ranges listVsVectorLinearPerformance(10); listVsVectorLinearPerformance(100); listVsVectorLinearPerformance(500); listVsVectorLinearPerformance(1000); listVsVectorLinearPerformance(2000); listVsVectorLinearPerformance(3000); listVsVectorLinearPerformance(4000); listVsVectorLinearPerformance(6000); listVsVectorLinearPerformance(8000); listVsVectorLinearPerformance(16000); listVsVectorLinearPerformance(32000); auto total_time_ms = watch.elapsedMs().count(); std::cout << "Exiting test,. the whole measuring took " << total_time_ms << " milliseconds"; std::cout << " (" << total_time_ms/1000 << "seconds or " << total_time_ms/(1000*60) << " minutes)" << std::endl; return 0; } |
LyogU01BUlQgTGlua2VkLWxpc3QgdnMgIm5vcm1hbCIgbGlua2VkLWxpc3QgdnMgVmVjdG9yLiAxNXNlY29uZHMgbWF4aW11bSBydW4tdGltZSAKTGluZWFyIHNlYXJjaCBhbmQgc29ydGVkIGluc2VydGlvbi4gc3RkOjpsaXN0IHJlbWVtYmVycyBsYXN0IHBvc2l0aW9uIHRvIAptaW5pbWl6ZSBvdmVyaGVhZCBpbiB0cmF2ZXJzaW5nIHRoZSBsaXN0LiovCgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKbmFtZXNwYWNlIGcyCnsgICAgICAgCiAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIGNsb2NrOwogIHR5cGVkZWYgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtaWNyb3NlY29uZHM7CiAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1pbGxpc2Vjb25kczsKCiAgY2xvY2s6OnRpbWVfcG9pbnQgbm93KCl7cmV0dXJuIGNsb2NrOjpub3coKTt9CgogIG1pY3Jvc2Vjb25kcyBpbnRlcnZhbFVzKGNvbnN0IGNsb2NrOjp0aW1lX3BvaW50JiB0MSwgY29uc3QgY2xvY2s6OnRpbWVfcG9pbnQmIHQwKQogIHtyZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8bWljcm9zZWNvbmRzPih0MSAtIHQwKTt9CgogIG1pbGxpc2Vjb25kcyBpbnRlcnZhbE1zKGNvbnN0IGNsb2NrOjp0aW1lX3BvaW50JiB0MSxjb25zdCBjbG9jazo6dGltZV9wb2ludCYgdDApCiAge3JldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxtaWxsaXNlY29uZHM+KHQxIC0gdDApO30KCgogIGNsYXNzIFN0b3BXYXRjaAogIHsKICAgIGNsb2NrOjp0aW1lX3BvaW50IHN0YXJ0XzsKICBwdWJsaWM6CiAgICBTdG9wV2F0Y2goKSA6IHN0YXJ0XyhjbG9jazo6bm93KCkpe30KICAgIGNsb2NrOjp0aW1lX3BvaW50IHJlc3RhcnQoKSAgICAgICAgIHsgc3RhcnRfID0gY2xvY2s6Om5vdygpOyByZXR1cm4gc3RhcnRfO30KICAgIG1pY3Jvc2Vjb25kcyBlbGFwc2VkVXMoKSAgICAgICAgICAgIHsgcmV0dXJuIGludGVydmFsVXMobm93KCksIHN0YXJ0Xyk7fQogICAgbWlsbGlzZWNvbmRzIGVsYXBzZWRNcygpICAgICAgICAgICAge3JldHVybiBpbnRlcnZhbE1zKG5vdygpLCBzdGFydF8pO30KICB9Owp9IC8vIGcyCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIE51bWJlcjsKdHlwZWRlZiBzdGQ6Omxpc3Q8TnVtYmVyPiAgICAgICAgICAgTnVtYmVyc0luTGlzdDsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxOdW1iZXI+ICAgICAgICAgTnVtYmVyc0luVmVjdG9yOwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgICAgICAgICAgICAgICBUaW1lVmFsdWU7CgoKLyogICAvLyBMYW1iZGEgZXhwcmVzc2lvbiBmb3IgZ2VuZXJhdGluZyBhIHJhbmRvbSBudW1iZXIgdXNpbmcgdGhlICdtZXJzZW5uZSB0d2lzdGVyIGRpc3RyaWJ1dGlvbicKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01lcnNlbm5lX3R3aXN0ZXIKYXV0byByYW5kb21faW50ID0gWyZdKGNvbnN0IE51bWJlciYgbG93LCBjb25zdCBOdW1iZXImIGhpZ2gpIC0+IE51bWJlciB7CiAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IGRpc3RyaWJ1dGlvbihsb3csIGhpZ2gpOwogICAgc3RkOjptdDE5OTM3IGVuZ2luZSgodW5zaWduZWQgaW50KXRpbWUoMCkpOyAvLyBNZXJzZW5uZSB0d2lzdGVyIE1UMTk5MzcKICAgIGF1dG8gZ2VuZXJhdG9yID0gc3RkOjpiaW5kKGRpc3RyaWJ1dGlvbiwgZW5naW5lKTsKICAgIHJldHVybiBnZW5lcmF0b3IoKTsKfTsgICAqLwoKLy8gUmFuZG9tIGludGVnZXIgZnVuY3Rpb24gZnJvbSBodHRwOi8vd3d3Mi5yZXNlYXJjaC5hdHQuY29tL35icy9DKysweEZBUS5odG1sI3N0ZC1yYW5kb20KaW50IHJhbmRvbV9pbnQoaW50IGxvdywgaW50IGhpZ2gpCnsKICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICBzdGF0aWMgZGVmYXVsdF9yYW5kb21fZW5naW5lIGVuZ2luZSB7fTsKICB0eXBlZGVmIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IERpc3RyaWJ1dGlvbjsKICBzdGF0aWMgRGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbiB7fTsKCiAgcmV0dXJuIGRpc3RyaWJ1dGlvbihlbmdpbmUsIERpc3RyaWJ1dGlvbjo6cGFyYW1fdHlwZXtsb3csIGhpZ2h9KTsKfQoKCgoKCgovLyBVc2UgYSB0ZW1wbGF0ZSBhcHByb2FjaCB0byB1c2UgZnVuY3RvciwgZnVuY3Rpb24gcG9pbnRlciBvciBsYW1iZGEgdG8gaW5zZXJ0IGFuCi8vIGVsZW1lbnQgaW4gdGhlIGlucHV0IGNvbnRhaW5lciBhbmQgcmV0dXJuIHRoZSAidGltZSByZXN1bHQiLgovLyBTZWFyY2ggaXMgTElORUFSLiBFbGVtZW50cyBhcmUgaW5zZXJ0IGluIFNPUlRFRCBvcmRlcgp0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+CnZvaWQgbGluZWFySW5zZXJ0aW9uKGNvbnN0IE51bWJlcnNJblZlY3RvciYgbnVtYmVycywgQ29udGFpbmVyJiBjb250YWluZXIpCnsKICAgIHN0ZDo6Zm9yX2VhY2gobnVtYmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpLAogICAgICAgICAgICAgICAgICBbJl0oY29uc3QgTnVtYmVyJiBuKQogICAgewogICAgICAgIGF1dG8gaXRyID0gY29udGFpbmVyLmJlZ2luKCk7CiAgICAgICAgZm9yICg7IGl0ciE9IGNvbnRhaW5lci5lbmQoKTsgKytpdHIpCiAgICAgICAgewogICAgICAgICAgICBpZiAoKCppdHIpID49IG4pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5pbnNlcnQoaXRyLCBuKTsKICAgIH0pOwp9CgpuYW1lc3BhY2V7Ci8vIEEgbGl0dGxlIGJpdCBzbWFydGVyIC0tLSByZW1lbWJlcnMgdGhlIGxhc3QgaW5zZXJ0aW9uIHBvaW50J3MgcG9zaXRpb24gYW5kIGNhbiAKLy8gc3RhcnQgZnJvbSB0aGF0IGlmIHdhbnRlZC1wb3NpdGlvbiBpcyA+PSBsYXN0LXBvc2l0aW9uOiB0aGlzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgdmFsdWVzCi8vIGFuZCBub3QgZnJvbSB0aGUgYWJzb2x1dGUgcG9zaXRpb25zClRpbWVWYWx1ZSBsaW5lYXJTbWFydEluc2VydFBlcmZvcm1hbmNlKGNvbnN0IE51bWJlcnNJblZlY3RvciYgbnVtYmVycywgTnVtYmVyc0luTGlzdCYgY29udGFpbmVyKQp7CiAgICBnMjo6U3RvcFdhdGNoIHdhdGNoOyAKICAgIGF1dG8gbGFzdF9pbnNlcnRlZF92YWx1ZSA9IDA7CiAgICBhdXRvIGxhc3RfaXRlcl9wb3NpdGlvbiA9IGNvbnRhaW5lci5iZWdpbigpOwoKICAgIHN0ZDo6Zm9yX2VhY2gobnVtYmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpLAogICAgICAgICAgICAgICAgICBbJl0oY29uc3QgTnVtYmVyJiBuKQogICAgewogICAgICAgIGF1dG8gaXRyID0gY29udGFpbmVyLmJlZ2luKCk7CiAgICAgICAgaWYobiA+PSBsYXN0X2luc2VydGVkX3ZhbHVlKQogICAgICAgIHsKICAgICAgICAgICBpdHIgPSBsYXN0X2l0ZXJfcG9zaXRpb247CiAgICAgICAgfQogICAgICAgICAgIAogICAgICAgIGZvciAoOyBpdHIhPSBjb250YWluZXIuZW5kKCk7ICsraXRyKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgqaXRyKSA+PSBuKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsYXN0X2l0ZXJfcG9zaXRpb24gPSBjb250YWluZXIuaW5zZXJ0KGl0ciwgbik7CiAgICAgICAgbGFzdF9pbnNlcnRlZF92YWx1ZSA9IG47CiAgICB9KTsKICAgIGF1dG8gdGltZSA9IHdhdGNoLmVsYXBzZWRVcygpLmNvdW50KCk7CiAgICByZXR1cm4gdGltZTsKfQp9IC8vIGFub255bW91cyBuYW1lc3BhY2UKCi8vIE1lYXN1cmUgdGltZSBpbiBtaWxsaXNlY29uZHMgZm9yIGxpbmVhciBpbnNlcnQgaW4gYSBzdGQgY29udGFpbmVyCnRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lcj4KVGltZVZhbHVlIGxpbmVhckluc2VydFBlcmZvcm1hbmNlKGNvbnN0IE51bWJlcnNJblZlY3RvciYgcmFuZG9tcywgQ29udGFpbmVyJiBjb250YWluZXIpCnsKICAgIGcyOjpTdG9wV2F0Y2ggd2F0Y2g7CiAgICBsaW5lYXJJbnNlcnRpb24oc3RkOjpjcmVmKHJhbmRvbXMpLCBjb250YWluZXIpOwogICAgYXV0byB0aW1lID0gd2F0Y2guZWxhcHNlZFVzKCkuY291bnQoKTsKICAgIHJldHVybiB0aW1lOwp9CgoKdm9pZCBsaXN0VnNWZWN0b3JMaW5lYXJQZXJmb3JtYW5jZShzaXplX3QgbmJyX29mX3JhbmRvbXMpCnsKICAvLyBHZW5lcmF0ZSBuIHJhbmRvbSB2YWx1ZXMgYW5kIHB1c2ggdG8gc3RvcmFnZQogIE51bWJlcnNJblZlY3RvciAgICAgdmFsdWVzKG5icl9vZl9yYW5kb21zKTsKICBzdGQ6OmZvcl9lYWNoKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmXShOdW1iZXImIG4pIHsgbiA9IHJhbmRvbV9pbnQoMCwgbmJyX29mX3JhbmRvbXMgLTEpO30pOyAKICAvL3ByaW50X2Rpc3RyaWJ1dGlvbih2YWx1ZXMpOyAKCiAgVGltZVZhbHVlIHNtYXJ0ZXJfbGlzdF90aW1lOwogIFRpbWVWYWx1ZSBsaXN0X3RpbWU7CiAgVGltZVZhbHVlIHZlY3Rvcl90aW1lOyAgICAKICBzdGQ6OmNvdXQgPDwgbmJyX29mX3JhbmRvbXMgPDwgIixcdCIgPDwgc3RkOjpmbHVzaDsKCgogIHsgLy8gZm9yY2UgbG9jYWwgc2NvcGUgLSB0byBjbGVhciB1cCB0aGUgY29udGFpbmVycyBhdCBleGl0CQogICAgTnVtYmVyc0luTGlzdCAgICAgIGxpc3Q7CiAgICBzbWFydGVyX2xpc3RfdGltZSA9IGxpbmVhclNtYXJ0SW5zZXJ0UGVyZm9ybWFuY2UodmFsdWVzLCBsaXN0KTsKICB9CiAgewogICAgTnVtYmVyc0luTGlzdCAgICAgIGxpc3Q7CiAgICBsaXN0X3RpbWUgPSBsaW5lYXJJbnNlcnRQZXJmb3JtYW5jZSh2YWx1ZXMsIGxpc3QpOwogIH0KICB7CiAgICBOdW1iZXJzSW5WZWN0b3IgICAgdmVjdG9yOwogICAgdmVjdG9yX3RpbWUgPSBsaW5lYXJJbnNlcnRQZXJmb3JtYW5jZSh2YWx1ZXMsIHZlY3Rvcik7CiAgICBzdGQ6OmNvdXQgPDwgIiAiICA8PCAiLCAiOwogIH0KICBzdGQ6OmNvdXQgPDwgIHNtYXJ0ZXJfbGlzdF90aW1lIDw8ICIsICIgPDwgbGlzdF90aW1lIDw8ICIsICIgPDwgdmVjdG9yX3RpbWUgPDwgc3RkOjplbmRsIDw8IHN0ZDo6Zmx1c2g7Cn0KCgppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCnsKCnN0ZDo6Y291dCA8PCAiXG5cbioqKioqKioqKiogVGltZXMgaW4gbWljcm9zZWNvbmRzKioqKioqKioqKiIgPDwgc3RkOjplbmRsOwpzdGQ6OmNvdXQgPDwgIkVsZW1lbnRzIEFERCAoU21hcnRlci1MaXN0LCAgIExpc3QsICAgIFZlY3RvcikiIDw8IHN0ZDo6ZW5kbDsKCiAgZzI6OlN0b3BXYXRjaCB3YXRjaDsgLy8gb25seSAxNXNlY29uZHMgYXZhaWxhYmxlLCB0aGVyZWZvcmUgdGhlIHNob3J0IHJhbmdlcwogIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlKDEwKTsKICBsaXN0VnNWZWN0b3JMaW5lYXJQZXJmb3JtYW5jZSgxMDApOwogIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlKDUwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoMTAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoMjAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoMzAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoNDAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoNjAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoODAwMCk7CiAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2UoMTYwMDApOwogIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlKDMyMDAwKTsKICBhdXRvIHRvdGFsX3RpbWVfbXMgPSB3YXRjaC5lbGFwc2VkTXMoKS5jb3VudCgpOwoKICBzdGQ6OmNvdXQgPDwgIkV4aXRpbmcgdGVzdCwuIHRoZSB3aG9sZSBtZWFzdXJpbmcgdG9vayAiIDw8IHRvdGFsX3RpbWVfbXMgPDwgIiBtaWxsaXNlY29uZHMiOwogIHN0ZDo6Y291dCA8PCAiICgiIDw8IHRvdGFsX3RpbWVfbXMvMTAwMCA8PCAic2Vjb25kcyBvciAiIDw8IHRvdGFsX3RpbWVfbXMvKDEwMDAqNjApIDw8ICIgbWludXRlcykiIDw8IHN0ZDo6ZW5kbDsgCiAgIHJldHVybiAwOwp9
-
upload with new input
-
result: Time limit exceeded time: 5s memory: 3548 kB signal: 24 (SIGXCPU)
********** Times in microseconds********** Elements ADD (Smarter-List, List, Vector) 10, , 4, 1, 3 100, , 12, 12, 13 500, , 121, 142, 121 1000, , 397, 521, 414 2000, , 1395, 1942, 1509 3000, , 3119, 4508, 3302 4000, , 5197, 7696, 5736 6000, , 16156, 35003, 19593 8000, , 38618, 78513, 38041 16000, , 237913, 443832, 157366 32000,
-
result: Time limit exceeded time: 5s memory: 3220 kB signal: 24 (SIGXCPU)
********** Times in microseconds********** Elements ADD (Smarter-List, List, Vector) 10, , 3, 1, 3 100, , 12, 11, 17 500, , 115, 138, 141 1000, , 386, 495, 511 2000, , 1352, 1859, 1883 3000, , 2977, 4306, 4193 4000, , 5145, 7657, 7241 6000, , 15462, 33640, 16225 8000, , 37087, 75721, 28674 16000, , 228401, 426127, 114100 32000,
-
result: Success time: 5.01s memory: 3088 kB returned value: 0
********** Times in microseconds********** Elements ADD (Smarter-List, List, Vector) 10, , 3, 1, 3 100, , 11, 11, 13 500, , 115, 140, 141 1000, , 380, 501, 514 2000, , 1343, 1876, 1888 3000, , 2998, 4385, 4156 4000, , 5067, 7390, 7260 6000, , 15504, 33669, 16221 8000, , 37144, 76678, 28733 16000, , 229060, 425824, 114170 32000, , 1267700, 2246701, 498444 Exiting test,. the whole measuring took 5037 milliseconds (5seconds or 0 minutes)
SMART Linked-list vs NORMAL linked-list vs VECTOR. 15s list vs vector. Linear search and sorted insertion. std::list remembers last position to minimize overhead in traversing the list.