Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 快速集合运算的算法_Javascript_Algorithm_Sorting - Fatal编程技术网

Javascript 快速集合运算的算法

Javascript 快速集合运算的算法,javascript,algorithm,sorting,Javascript,Algorithm,Sorting,我有(a,b)形式的集合 (2,4)(1,3)(4,5)(1,2) 给定一个列表,比如我想找到列表中第一个元素为2或1的所有集合,在这种情况下(2,4)(1,3)(1,2),并从中得到最大值(b)…在这种情况下,它将是4 如何尽可能快地做到这一点 我的第一种方法是,从集合中获取所有a,并与它们相交,然后对集合中的所有b进行最大化……但这在大型集合中无法很好地扩展。 此外,如果需要,我们还可以更改数据结构,或者如果有帮助,可以进行任何预处理 我使用的是纯javascript,我将它们作为元组数组或

我有(a,b)形式的集合

(2,4)(1,3)(4,5)(1,2)

给定一个列表,比如我想找到列表中第一个元素为2或1的所有集合,在这种情况下(2,4)(1,3)(1,2),并从中得到最大值(b)…在这种情况下,它将是4

如何尽可能快地做到这一点

我的第一种方法是,从集合中获取所有a,并与它们相交,然后对集合中的所有b进行最大化……但这在大型集合中无法很好地扩展。 此外,如果需要,我们还可以更改数据结构,或者如果有帮助,可以进行任何预处理

我使用的是纯javascript,我将它们作为元组数组或具有2个属性int,int的对象


感谢您的建议这里有两种简单的方法,一种使用for循环,另一种使用reduce

函数findMax(列表、过滤器){
设max=0;
for(让列表的[键,值]){
如果(过滤器包括(键))
max=Math.max(max,val)
}
返回最大值;
}
函数findMax2(列表、筛选器){
常量toMax=(max[key,val])=>Math.max(filter.includes(key)*val,max);
returnlist.reduce(toMax,0);
}
常数数据=[
[2, 4],
[1, 3],
[4, 5],
[1, 2]
]
常量过滤器=[1,2];
console.log(findMax(数据、过滤器))

log(findMax2(数据,过滤器))
一个集合是无序的。。。我不明白。你说的是哪种语言?你是说元组吗?还是由元组组成的集合?@PatrickArtner。。我更新了这个问题,我使用纯javascript和数组来表示数据……希望它能帮上忙:可以用}(n)轻松解决,其中n是(a,b)元组的数量。一次迭代就足够了,也可以对整个列表进行一次迭代,对所有“过滤”元组进行一次迭代。。。为什么你认为你的方法不会很快?你的名字建议你编码,让我们看看。请注意,在JS中,集合不是您所指的。此外,元组在JS中不是一个单独的概念——它将是一个数组。如果您需要重用它,我将使用一个带有键f.e.2的字典,并在它之后使用一个DataTuple列表。您需要通过1次将所有数据插入dict,然后通过O(1)到达正确的数据点。如果在将数据点再次添加到dict的列表(更多的O(…))中时,根据条件对数据点进行排序,则可以选择正确的结构来获取第一个/最后一个数据点。否则,您需要最大化属于键O的分区(无论其中有多少个)。您拥有更多内存,但访问速度更快。如果您需要一次,请完成一次,测试键,测试>并完成。您确实应该初始化
e=false
,以避免混淆。您还可以直接对(列表的常数[c,d])执行
,不需要额外的
ele
变量来分解结构。顺便说一句,如果
vals
是一个数组,只需使用
e=vals.includes(c)
;如果它是一个集合,只需使用
e=vals.has(c)