3
3
#include < cstdlib>
4
4
#include < cstring>
5
5
#include < iostream>
6
+ #include < map>
6
7
#include < random>
7
8
#include < thread>
8
9
#include < unordered_set>
@@ -112,7 +113,6 @@ std::unordered_set<void*> litter(std::size_t objectSize, std::size_t nPages,
112
113
#define ITERATIONS 40'000
113
114
#endif
114
115
115
- const auto nMinDistances = std::min(256 , N - 1 );
116
116
const auto distanceClampMax = PAGE_SIZE;
117
117
118
118
int main ([[maybe_unused]] int argc, [[maybe_unused]] char ** argv) {
@@ -146,7 +146,7 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv) {
146
146
147
147
std::sort (objects.begin (), objects.end ());
148
148
149
- auto minDistances = std::vector <std::size_t >(nMinDistances , std::numeric_limits<std:: size_t >:: max () );
149
+ auto distances = std::map <std::size_t , std::size_t >( );
150
150
std::size_t sumDistances = 0 ;
151
151
152
152
for (std::size_t i = 1 ; i < objects.size (); ++i) {
@@ -155,9 +155,7 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv) {
155
155
0 , distanceClampMax);
156
156
157
157
sumDistances += distance;
158
-
159
- minDistances.insert (std::upper_bound (minDistances.begin (), minDistances.end (), distance), distance);
160
- minDistances.erase (minDistances.end () - 1 );
158
+ ++distances[distance];
161
159
}
162
160
163
161
const auto intersection
@@ -167,7 +165,12 @@ int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv) {
167
165
168
166
const auto avgDistance = (double ) sumDistances / (objects.size () - 1 );
169
167
170
- std::cout << " Min distances: " << minDistances << std::endl;
168
+ std::cout << " Min distances:" << std::endl;
169
+ for (const auto [distance, count] : distances) {
170
+ if (count > 20 ) {
171
+ std::cout << " \t " << distance << " : " << count << std::endl;
172
+ }
173
+ }
171
174
std::cout << " Avg distance: " << avgDistance << std::endl;
172
175
173
176
const auto start = std::chrono::high_resolution_clock::now ();
0 commit comments