@graphty/algorithms
Version:
Graph algorithms library for browser environments implemented in TypeScript
47 lines • 1.6 kB
JavaScript
/**
* Check if a graph should use optimizations based on its size
*/
function shouldUseOptimizations(nodeCount, edgeCount) {
// Use optimizations for graphs with more than 10k nodes or 100k edges
return nodeCount > 10000 || edgeCount > 100000;
}
/**
* Determine if optimizations should be used for a given graph
*/
export function shouldOptimize(graph, options = {}) {
const { optimized = "auto" } = options;
if (optimized === "auto") {
// Check graph size
return shouldUseOptimizations(graph.nodeCount, graph.totalEdgeCount);
}
return optimized;
}
/**
* Merge optimization options with algorithm-specific options
*/
export function mergeOptimizationOptions(graph, options) {
const { optimized: userOptimized, ...rest } = options;
return {
...rest,
optimized: shouldOptimize(graph, userOptimized !== undefined ? { optimized: userOptimized } : {}),
};
}
/**
* Create an optimized version of an algorithm
* @example
* const optimizedBetweenness = createOptimizedAlgorithm(
* betweennessCentrality,
* (graph, options) => ({...options, optimized: true})
* );
*/
export function createOptimizedAlgorithm(algorithm, optionsTransformer) {
return (...args) => {
const [graph, options, ...rest] = args;
if (optionsTransformer && options !== undefined) {
const transformedOptions = optionsTransformer(graph, options);
return algorithm(...[graph, transformedOptions, ...rest]);
}
return algorithm(...args);
};
}
//# sourceMappingURL=optimization-helpers.js.map