Odległość tau Kendalla

0

Czy był by w stanie wyjaśnić mi ktoś jak zaimplementować ten algorytm, bo mimo wielu usilnych prób wychodzi mi to dość marnie :/
Mój kod (fragment):

void kendall_tau_distance() {
	for(int i = 0; i < size; ++i)
		for(int o = i + 1; o < size; ++o)
			if (abs(sign(n1[i] - n1[o]) - sign(n2[i] - n2[o])) > 1)
				dist++;
}
1

raczej ma być tak (trochę zgaduje, bo nie wiem co dokładnie masz w n1[] i n2[])

double kendall_tau_distance() {
    const double EPSILON = 0.000001;
    int positiveCount=0, negativeCount=0;
    for(int i = 0; i < size; ++i)
         for(int o = i + 1; o < size; ++o) {
             if ((n1[i] - n1[o])*(n2[i] - n2[o])) > EPSILON)
                 positiveCount++;
             else if ((n1[i] - n1[o])*(n2[i] - n2[o])) < EPSILON)
                 negativeCount++;
    return 2*(positiveCount-negativeCount)/(double)((size-1)*size);
}
0

Nie potrzebuję wartości double, mnie interesuje tylko odległość a nie współczynnik próby :) A w czasie O(n \cdot log n) bo wiki tłumaczy to w dość pokrętny sposób :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1