fix(algos): refactor extrema circular buffer

This commit is contained in:
Barrett Ruth 2024-11-30 18:28:40 -06:00
parent 5fd49dfb1e
commit 3c949f3da3
4 changed files with 2 additions and 18 deletions

View file

@ -201,11 +201,6 @@
<div class="code" data-file="monotonic.cpp"></div>
<h3>further improvements</h3>
<ol>
<li>
While the final approach is <i>theoretically</i> faster than the
second, with small data sets the overhead of the latter is
likely to upset any performance gains.
</li>
<li>
The class could leverage templates to take in a comparator
<span><code>std::less&lt;double&gt;</code></span>

View file

@ -4,8 +4,6 @@
class ExtremaCircularBuffer {
public:
ExtremaCircularBuffer(size_t capacity) : capacity(capacity) {}
void push_back(double value) {
if (prices.size() == capacity) {
double front = prices.front();
@ -49,8 +47,5 @@ public:
return sorted_prices.begin()->first;
}
private:
std::deque<double> prices;
std::map<double, size_t> sorted_prices;
size_t capacity;
/* methods & fields omitted for brevity */
};

View file

@ -4,8 +4,6 @@
class ExtremaCircularBuffer {
public:
explicit ExtremaCircularBuffer(size_t capacity) : capacity(capacity) {}
void push_back(double value) {
if (prices.size() == capacity) {
double front_value = prices.front();
@ -27,8 +25,6 @@ public:
prices.pop_front();
}
size_t size() const { return prices.size(); }
double get_max() const {
if (prices.empty()) {
throw std::out_of_range("Cannot find max() of empty buffer");
@ -59,7 +55,5 @@ private:
}
}
std::deque<double> prices;
std::deque<std::pair<double, size_t>> maxs;
size_t capacity;
/* methods & fields omitted for brevity */
};