【发布时间】:2021-10-08 13:44:24
【问题描述】:
我有一个大数组array1,其中填充了已经排序的数字数组,如下例所示。现在我想检查array1 是否包含array2。
目前我有函数searchForArray 可以正常工作。但由于array1 的数组很大,所以速度很慢。
如何改进搜索功能以获得更好的性能?
var array1 = [
[1, 0], [1, 2], [1, 5], [1 , 12],
[2, 3], [2, 9], [2, 25],
[7, 2], [7, 4], [7, 7], [7, 8], [7, 16],
[8, 20], [8, 35], [8, 40], [8, 50]
];
var array2 = [7, 4];
if (searchForArray(array1, array2)) {
// Array 2 is in array1
}
function searchForArray(bigArray, searchArray) {
const a = JSON.stringify(bigArray);
const b = JSON.stringify(searchArray);
const c = a.indexOf(b);
if (c != -1) {
return true;
}
return false;
}
【问题讨论】:
-
你的
array1总是有那种分类的性质吗?内部数组的第一个元素似乎已排序,您始终可以将其用于二进制搜索。 -
这个问题有一个更好的位置:codereview.stackexchange.com,如果它被这里的社区否决
-
@SamridhTuladhar 是的,它在自然界中总是这样排序的。我将尝试实现二进制搜索来测试性能如何提高。
-
它取决于您的数据大小、时间复杂度和空间复杂度的限制。对于像这样的小数据样本,线性搜索是首选,因为您不必花费额外的时间来对其进行排序。仅供参考:还有
TreeMap和HashMap -
@HoangLe 我有非常大的数组,最多可容纳 20'000 个元素。数组中的数据已经自动排序如上图,所以我不必实现排序算法。
标签: javascript arrays sorting search