//выбо опорной точки
int Select_vp(vector<int> &Table, size_t start, size_t end, int &index){
	size_t p1 = rand() % (end-start) + start;
	size_t p2 = rand() % (end-start) + start;
	if (p1 > p2){
		size_t temp = p1;
		p1 = p2;
		p2 = temp;
	}
	int best_p = 0;
	double best_spread = 0;
	for(size_t i = p1; i <= p2; ++i){
		size_t d1;
		size_t d2;
		d1 = rand() % (end-start) + start;
		d2 = rand() % (end-start) + start;
		if (d1 > d2){
			size_t temp = d1;
			d1 = d2;
			d2 = temp;
		}
		double mu = MedianDist(Table, d1, d2, i);
		double spread = SecondMoment(Table, d1, d2, i, mu);
		if(spread >= best_spread){							//было > (если не исправили, то в тривиальном случае не находили бы элемент)
			best_spread = spread;
			best_p = i;
		}
	}
	index = best_p;
	return Table[best_p];
}
예제 #2
0
double NakagamiDistribution::ExcessKurtosis() const
{
    double mean = Mean();
    double secondMoment = SecondMoment();
    double thirdMoment = ThirdMoment();
    double fourthMoment = FourthMoment();
    double meanSq = mean * mean;
    double variance = secondMoment - meanSq;
    double numerator = fourthMoment - 4 * thirdMoment * mean + 6 * secondMoment * meanSq - 3 * meanSq * meanSq;
    double denominator = variance * variance;
    return numerator / denominator - 3.0;
}