Ранговая корреляция · Функция ранжирования
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, время: 21:33. |