<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
var arr1 = [];
var arr2 = [];
var arr3 = [];
var arr4 = [];
for (i = 0; i < 1000; i++) {
arr1.push(getRandom());
arr2.push(getRandom());
arr3.push(getRandom());
arr4.push(getRandom());
arr1.sort();
arr2.sort();
arr3.sort();
arr4.sort();
}
function getRandom() {
const minimum = 1;
const maximum = 1000;
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
return randomnumber;
}
const results = new Set(_.intersection(arr1, arr2, arr3, arr4));
function intersectMultipleArrays(arrays) {
if (arrays.length === 0) return new Set();
// Sort arrays by length to optimize operations
arrays.sort((a, b) => a.length - b.length);
// Start with the smallest array as the base intersection set
let intersection = new Set(arrays[0]);
// Iterate over the remaining arrays and filter the intersection
for (let i = 1; i < arrays.length; i++) {
intersection = new Set(arrays[i].filter(item => intersection.has(item)));
// Early exit if intersection is empty
if (intersection.size === 0) return new Set();
}
// Return the final Set
return intersection;
}
const results = intersectMultipleArrays(arr1, arr2, arr3, arr4);
const results = new Set(
[arr1, arr2, arr3, arr4]
.sort((a, b) => b.length - a.length)
.reduce((a, b) => a.filter(aValue => b.includes(aValue)))
);
function intersectMultipleArraysRevised(arrays) {
let maximum = -1;
for (let i = 0; i < arrays.length; i++) {
for (let j = 0; j < arrays[i].length; j++) {
const num = arrays[i][j];
if (num > maximum) {
maximum = num;
}
}
}
const count = new Array(maximum + 1).fill(0);
for (let i = 0; i < arrays.length; i++) {
for (let j = 0; j < arrays[i].length; j++) {
const num = arrays[i][j];
count[num]++;
}
}
const result = new Set();
const arrLen = arrays.length;
for (let i = 0; i <= maximum; i++) {
if (count[i] === arrLen) {
result.add(i);
}
}
return result;
}
const results = intersectMultipleArraysRevised(arr1, arr2, arr3, arr4);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Lodash _.intersection() | |
Custom optimized function 1 (Best for arbitrary numbers) | |
Custom optimized function 2 | |
Custom optimized function 3 (Best for reasonable max) |
Test name | Executions per second |
---|---|
Lodash _.intersection() | 11573.1 Ops/sec |
Custom optimized function 1 (Best for arbitrary numbers) | 15326.1 Ops/sec |
Custom optimized function 2 | 6522.7 Ops/sec |
Custom optimized function 3 (Best for reasonable max) | 91182.9 Ops/sec |
Measuring the performance of different approaches for intersecting multiple sorted arrays is an interesting benchmark.
What is being tested?
The provided JSON represents four different test cases for finding the intersection of four sorted arrays using various methods:
_.intersection()
function from Lodash, a popular JavaScript utility library.Options comparison
The four test cases compare the performance of different approaches:
Browser results
The latest benchmark results show that:
This result suggests that optimizing for a specific use case can lead to significant performance improvements.
Takeaways
When working on intersecting multiple sorted arrays: