refs #481 Algorithms to copy random elements from containers.

This commit is contained in:
Mathew Sutcliffe
2015-10-03 00:14:35 +01:00
parent aad527933d
commit 86913471a9
3 changed files with 118 additions and 0 deletions

View File

@@ -9,8 +9,11 @@
#include "samplesalgorithm.h"
#include "blackmisc/algorithm.h"
#include "blackmisc/sequence.h"
#include "blackmisc/collection.h"
#include <QDebug>
#include <QString>
#include <numeric>
namespace BlackMiscTest
{
@@ -20,6 +23,41 @@ namespace BlackMiscTest
*/
int CSamplesAlgorithm::samples()
{
BlackMisc::CSequence<int> seq;
for (int i = 1; i <= 100; ++i)
{
seq.push_back(i);
}
const int samples = 200;
BlackMisc::CSequence<int> means;
{
for (int i = 0; i < samples; ++i)
{
auto randoms = seq.randomElements(10);
means.push_back(std::accumulate(randoms.cbegin(), randoms.cend(), 0) / 10);
}
int mean = std::accumulate(means.cbegin(), means.cend(), 0) / samples;
int stdDev = std::sqrt(std::accumulate(means.cbegin(), means.cend(), 0, [ & ](int a, int n) { return a + (n - mean) * (n - mean); }) / samples);
qDebug() << "randomElements";
qDebug() << "means:" << means;
qDebug() << "mean of the means:" << mean;
qDebug() << "std deviation of the means:" << stdDev;
}
means.clear();
{
for (int i = 0; i < samples; ++i)
{
auto randoms = seq.sampleElements(10);
means.push_back(std::accumulate(randoms.cbegin(), randoms.cend(), 0) / 10);
}
int mean = std::accumulate(means.cbegin(), means.cend(), 0) / samples;
int stdDev = std::sqrt(std::accumulate(means.cbegin(), means.cend(), 0, [ & ](int a, int n) { return a + (n - mean) * (n - mean); }) / samples);
qDebug() << "sampleElements";
qDebug() << "means:" << means;
qDebug() << "mean of the means:" << mean;
qDebug() << "std deviation of the means:" << stdDev;
}
QStringList src { "a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3" };
std::random_shuffle(src.begin(), src.end());
qDebug() << src;