Stop pushing on the vector

For better performance
This commit is contained in:
Segcolt 2024-10-12 21:24:16 -03:00
parent 65aed86783
commit 7aad87810f

35
sa.hpp
View File

@ -58,25 +58,28 @@ class solution {
its.insert(i); its.insert(i);
} }
this->items.resize(items.size());
size_t i = 0;
long long cap = capacity; long long cap = capacity;
while (!its.empty()) { while (!its.empty()) {
auto itr = its.upper_bound(cap); auto itr = its.upper_bound(cap);
if (itr == its.begin()) { if (itr == its.begin()) {
cap = capacity; cap = capacity;
cap -= *its.begin(); cap -= *its.begin();
this->items.push_back(*its.begin()); itr = its.begin();
its.erase(its.begin()); } else {
continue; itr--;
} cap -= *itr;
itr--; }
cap -= *itr; this->items[i] = *itr;
this->items.push_back(*itr); its.erase(itr);
its.erase(itr); i++;
} }
fitness = calculate_boxes(); fitness = calculate_boxes();
} }
void setneighbor() { // Gera um vizinho da solução void setneighbor() { // Gera um vizinho da solução
std::uniform_int_distribution<> dist(0, items.size() - 1); std::uniform_int_distribution<> dist(0, items.size() - 1);