windows-nt/Source/XPSP1/NT/base/fs/sis/groveler/confest.cpp

111 lines
2 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
confest.cpp
Abstract:
SIS Groveler confidence estimator
Authors:
John Douceur, 1998
Environment:
User Mode
Revision History:
--*/
#include "all.hxx"
ConfidenceEstimator::ConfidenceEstimator(
int num_groups,
double initial_value)
{
ASSERT(this != 0);
ASSERT(num_groups > 0);
ASSERT(initial_value >= 0.0);
ASSERT(initial_value <= 1.0);
this->num_groups = num_groups;
group_values = new double[num_groups];
confidence_value = initial_value;
reset(initial_value);
}
ConfidenceEstimator::~ConfidenceEstimator()
{
ASSERT(this != 0);
ASSERT(num_groups > 0);
ASSERT(confidence_value >= 0.0);
ASSERT(confidence_value <= 1.0);
ASSERT(group_values != 0);
delete[] group_values;
group_values = 0;
}
void
ConfidenceEstimator::reset(
double reset_value)
{
ASSERT(this != 0);
ASSERT(num_groups > 0);
ASSERT(confidence_value >= 0.0);
ASSERT(confidence_value <= 1.0);
ASSERT(group_values != 0);
ASSERT(reset_value >= 0.0);
ASSERT(reset_value <= 1.0);
for (int index = 0; index < num_groups; index++)
{
group_values[index] = reset_value;
}
confidence_value = reset_value;
}
void
ConfidenceEstimator::update(
int group_index,
double value)
{
ASSERT(this != 0);
ASSERT(num_groups > 0);
ASSERT(confidence_value >= 0.0);
ASSERT(confidence_value <= 1.0);
ASSERT(group_values != 0);
ASSERT(group_index >= 0);
ASSERT(group_index < num_groups);
if (value > group_values[group_index])
{
group_values[group_index] = value;
confidence_value = 1.0;
for (int index = 0; index < num_groups; index++)
{
if (group_values[index] < confidence_value)
{
confidence_value = group_values[index];
}
}
}
ASSERT(confidence_value >= 0.0);
ASSERT(confidence_value <= 1.0);
}
double
ConfidenceEstimator::confidence() const
{
ASSERT(this != 0);
ASSERT(num_groups > 0);
ASSERT(confidence_value >= 0.0);
ASSERT(confidence_value <= 1.0);
ASSERT(group_values != 0);
return confidence_value;
}