54 lines
1.3 KiB
Plaintext
54 lines
1.3 KiB
Plaintext
<snippet>
|
|
<subclass>afryca.ase.Snippet</subclass>
|
|
<file></file>
|
|
<category>Library</category>
|
|
<name>distance</name>
|
|
<description></description>
|
|
<code>
|
|
var distance = (typeof exports === "undefined")?(function distance() {}):(exports);
|
|
if(typeof global !== "undefined") { global.distance = distance; }
|
|
|
|
distance.kemeny = function kemeny(r1, r2) {
|
|
var result;
|
|
if ((r1 != null) && (r2 != null)) {
|
|
if (r1.length == r2.length) {
|
|
result = 0;
|
|
var v1;
|
|
var v2;
|
|
var n = r1.length;
|
|
for (var l = 0; l < (n - 1); l++) {
|
|
for (var k = l + 1; k < n; k++) {
|
|
v1 = r1[l] - r1[k]; // v1{(0,equals),(<0,o(l)<o(k)),(>0,o(l)>o(k)}
|
|
v2 = r2[l] - r2[k]; // v2{(0,equals),(<0,o(l)<o(k)),(>0,o(l)>o(k)}
|
|
|
|
if ((v1 < 0) && (v2 > 0)) {
|
|
result += 1;
|
|
} else if ((v1 > 0) && (v2 < 0)) {
|
|
result += 1;
|
|
} else if ((v1 == 0) && (v2 != 0)) {
|
|
result += 0.5;
|
|
} else if ((v1 != 0) && (v2 == 0)) {
|
|
result += 0.5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
distance.normalizeKemeny = function normalizeKemeny(kemeny, numberOfElements) {
|
|
var result;
|
|
if (numberOfElements > 0) {
|
|
result = (2 * kemeny) / (numberOfElements * (numberOfElements - 1));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
distance.normalizedKemeny = function normalizedKemeny(r1, r2) {
|
|
return distance.normalizeKemeny(distance.kemeny(r1, r2), r1.length);
|
|
}
|
|
|
|
distance
|
|
</code>
|
|
</snippet> |