Ранговая корреляция · Функция ранжирования
function rank(array) {
var i, j, count, index, pos, posSum, val, sorted = array.slice(0).sort(function (a, b) {
return a - b;
});
for (i = 0; i < array.length; i++) {
val = array[i];
if (typeof val != "number") {
continue;
}
array[i] = null;
if (array.indexOf(val) == -1) {
array[i] = {value: sorted.indexOf(val) + 1};
} else {
array[i] = val;
pos = sorted.indexOf(val);
posSum = 0;
count = 0;
index = [];
for (j = 0; j < array.length; j++) {
if (array[j] === val) {
++count;
++pos;
posSum += pos;
array[j] = null;
index.push(j);
}
}
val = posSum / count;
for (j = 0; j < index.length; j++) {
array[index[j]] = {value: val};
}
}
}
for (i = 0; i < array.length; i++) {
array[i] = array[i].value;
}
return array;
}
alert(rank([1, 3, 52, 6, 100, 64, 71, 100, 100, 100]).join(", "));
Цитата:
Простого алгоритма не нагуглил, пришлось делать самому. Может кому еще пригодится) rank correlation |
| Часовой пояс GMT +3, время: 06:39. |