better handling of large arrays
This commit is contained in:
parent
8f29cd70fe
commit
97c440fd8b
2 changed files with 15 additions and 8 deletions
20
rank.js
20
rank.js
|
@ -15,7 +15,7 @@ function multiplyMatrix(a, b, c) {
|
|||
}
|
||||
|
||||
// derived from https://git.dervland.net/biglyderv/new-bigly-chat/src/branch/master/docs/stats.php
|
||||
function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu = false, arrayMax = 800) {
|
||||
function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu = false, arrayMax = 800, oldVals = false) {
|
||||
|
||||
let fng = {};
|
||||
let fnc = {};
|
||||
|
@ -25,22 +25,28 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu
|
|||
|
||||
let keys = Object.keys(result);
|
||||
let leftover = [];
|
||||
keys = keys.sort((a,b) => result[a].followers.length < result[b].followers.length);
|
||||
|
||||
if (oldVals) {
|
||||
keys = keys.sort((a, b) => oldVals[b] - oldVals[a]);
|
||||
} else {
|
||||
keys = keys.sort((a, b) => result[b].followers.length - result[a].followers.length);
|
||||
}
|
||||
|
||||
let kl2 = keys.length;
|
||||
if (kl2 > arrayMax) {
|
||||
console.warn(`Array too big. Splitting into multiple arrays...`);
|
||||
let ll = {};
|
||||
let hh = keys.slice(arrayMax);
|
||||
for (let g of hh) {
|
||||
for (let g of hh) {
|
||||
ll[g] = result[g];
|
||||
}
|
||||
leftover = rankCalc(ll,iterations,main,domainMode,isGpu,arrayMax);
|
||||
leftover = rankCalc(ll, iterations, main, domainMode, isGpu, arrayMax);
|
||||
for (let i in leftover) {
|
||||
leftover[i] /= (kl2 / arrayMax) * 3;
|
||||
leftover[i] /= (kl2 / arrayMax);
|
||||
}
|
||||
}
|
||||
|
||||
keys.length = Math.min(keys.length,1000);
|
||||
keys.length = Math.min(keys.length, 1000);
|
||||
|
||||
let rl = keys.length;
|
||||
rls = rl ** 2;
|
||||
|
@ -163,7 +169,7 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu
|
|||
}
|
||||
}
|
||||
|
||||
pr = Object.assign(pr,leftover);
|
||||
pr = Object.assign(pr, leftover);
|
||||
|
||||
let ov = Object.keys(pr);
|
||||
let an = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) != -1);
|
||||
|
|
3
site.js
3
site.js
|
@ -249,6 +249,7 @@ async function siteCollector(user, path, site, useLimit, data2, settings) {
|
|||
}
|
||||
|
||||
async function main(settings) {
|
||||
let calcedRank = {};
|
||||
let { site, discardThreshold, depth, user, matrixIterations, useArchive, } = settings;
|
||||
user = user.split(',');
|
||||
|
||||
|
@ -317,7 +318,7 @@ async function main(settings) {
|
|||
}
|
||||
}
|
||||
console.log(`Graph is fully repaired`);
|
||||
let calcedRank = rankCalc(data, (i == depth - 1) ? matrixIterations : 3, user, site == 'url', settings.isGpu, settings.arrayMax)
|
||||
calcedRank = rankCalc(data, (i == depth - 1) ? matrixIterations : 3, user, site == 'url', settings.isGpu, settings.arrayMax, calcedRank)
|
||||
dat = Object.entries(calcedRank);
|
||||
dat = dat.sort((a, b) => b[1] - a[1]);
|
||||
console.log(`Graph is calculated with ${dat.length} entries`);
|
||||
|
|
Loading…
Reference in a new issue