// 计算标准差 function caculate_standar_deviation(data) { // 计算数学期望(均值) const calculateMean = (values) => { const total = values.reduce((acc, value) => acc + parseFloat(value), 0); return total / values.length; }; // 计算标准差 const calculateStandardDeviation = (values, mean) => { const variance = values.reduce((acc, value) => acc + Math.pow(parseFloat(value) - mean, 2), 0) / values.length; return Math.sqrt(variance); }; // 计算每个用户的标准差 const results = Object.keys(data).reduce((acc, user) => { const values = data[user]; const mean = calculateMean(values); const stddev = calculateStandardDeviation(values, mean); acc[user] = stddev; return acc; }, {}); return results; } /** * 计算每个用户最终得分,满分为100分 * @param {Array} alluser_mhs24h 每个用户过去24小时平均算力 * @param {Number} hash_percent 24小时平均算力权重 * @returns 每个用户最终得分 */ function score(alluser_mhs24h, hash_percent = 1) { // 提取 mhs24h 数值 const hashrateValues = alluser_mhs24h.map((obj) => obj.mhs24h); // 计算总和 const totalHashrate = hashrateValues.reduce((sum, value) => sum + value, 0); const result = {}; // 计算每个用户的算力占比 for (let { user, mhs24h } of alluser_mhs24h) { result[user] = (mhs24h / totalHashrate) * hash_percent; } return result; } module.exports = { caculate_standar_deviation, score };