35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
/**
|
|
* Calculate the distances by using the numbers, strings and dates.
|
|
* @param {node} source
|
|
* @param {node} target
|
|
* @param {array} properties - the properties of the nodes.
|
|
* @return {number} the distance between source and target nodes.
|
|
*/
|
|
function calculateManhattanDistance (source, target, properties, normArgs) {
|
|
var sum = 0.0,
|
|
cols = 0;
|
|
|
|
// console.log(properties);
|
|
// Iterate through every column of data
|
|
for (var i = 0; i < properties.length; i++) {
|
|
property = properties[i];
|
|
if (property.toLowerCase() !== 'class' && property.toLowerCase() !== 'app' && property.toLowerCase() !== 'user' && property.toLowerCase() !== 'weekday') {
|
|
var s = source[property],
|
|
t = target[property];
|
|
|
|
if (s !== t) {
|
|
cols++;
|
|
}
|
|
|
|
if (normArgs.sig[i] !== 0) {
|
|
s = (s - normArgs.avg[i]) / (2.0 * normArgs.sig[i]);
|
|
t = (t - normArgs.avg[i]) / (2.0 * normArgs.sig[i]);
|
|
}
|
|
sum += Math.abs(s - t);
|
|
}
|
|
}
|
|
|
|
// console.log(Math.sqrt(sumDiff)/cols);
|
|
return sum * (cols / properties.length);
|
|
}
|