Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
chunk_processing::VarianceStrategy< T > Class Template Reference

#include <chunk_strategies.hpp>

+ Inheritance diagram for chunk_processing::VarianceStrategy< T >:
+ Collaboration diagram for chunk_processing::VarianceStrategy< T >:

Public Member Functions

 VarianceStrategy (double threshold)
 
std::vector< std::vector< T > > apply (const std::vector< T > &data) const override
 

Private Member Functions

double calculate_rolling_variance (const T &new_value, double prev_mean, double &mean, size_t n) const
 

Private Attributes

double threshold_
 

Detailed Description

template<typename T>
class chunk_processing::VarianceStrategy< T >

Definition at line 82 of file chunk_strategies.hpp.

Constructor & Destructor Documentation

◆ VarianceStrategy()

template<typename T >
chunk_processing::VarianceStrategy< T >::VarianceStrategy ( double  threshold)
inlineexplicit

Definition at line 97 of file chunk_strategies.hpp.

Member Function Documentation

◆ apply()

template<typename T >
std::vector< std::vector< T > > chunk_processing::VarianceStrategy< T >::apply ( const std::vector< T > &  data) const
inlineoverridevirtual

Implements chunk_processing::ChunkStrategy< T >.

Definition at line 99 of file chunk_strategies.hpp.

99 {
100 std::vector<std::vector<T>> result;
101 if (data.empty())
102 return result;
103
104 std::vector<T> current_chunk;
105 double mean = 0.0;
106 size_t count = 0;
107
108 for (const auto& value : data) {
109 count++;
110 current_chunk.push_back(value);
111
112 if (count > 1) {
113 double new_mean = 0.0;
114 double variance = calculate_rolling_variance(value, mean, new_mean, count);
115 mean = new_mean;
116
117 if (variance > threshold_) {
118 if (current_chunk.size() > 1) {
119 result.push_back(current_chunk);
120 current_chunk.clear();
121 current_chunk.push_back(value);
122 count = 1;
123 mean = static_cast<double>(value);
124 }
125 }
126 } else {
127 mean = static_cast<double>(value);
128 }
129 }
130
131 if (!current_chunk.empty()) {
132 result.push_back(current_chunk);
133 }
134
135 return result;
136 }
double calculate_rolling_variance(const T &new_value, double prev_mean, double &mean, size_t n) const

References chunk_processing::VarianceStrategy< T >::calculate_rolling_variance(), and chunk_processing::VarianceStrategy< T >::threshold_.

Referenced by TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().

◆ calculate_rolling_variance()

template<typename T >
double chunk_processing::VarianceStrategy< T >::calculate_rolling_variance ( const T &  new_value,
double  prev_mean,
double &  mean,
size_t  n 
) const
inlineprivate

Definition at line 86 of file chunk_strategies.hpp.

87 {
88 mean = prev_mean + (static_cast<double>(new_value) - prev_mean) / n;
89 double variance = 0.0;
90 if (n > 1) {
91 variance = std::pow(static_cast<double>(new_value) - mean, 2.0) / (n - 1);
92 }
93 return variance;
94 }

Referenced by chunk_processing::VarianceStrategy< T >::apply().

Member Data Documentation

◆ threshold_

template<typename T >
double chunk_processing::VarianceStrategy< T >::threshold_
private

Definition at line 84 of file chunk_strategies.hpp.

Referenced by chunk_processing::VarianceStrategy< T >::apply().


The documentation for this class was generated from the following file: