C# c获取整数列表子集的最快方法

C# c获取整数列表子集的最快方法,c#,list,math,mathematical-optimization,C#,List,Math,Mathematical Optimization,我得到5个列表,我需要所有列表的子集 I 200.000整数值 II 30.000整数值 III 10.000整数值 IV 200整数值 用数学术语A n B n C n D.我需要1000个并发用户来完成这项工作 使用c最快的方法是什么? 一个2MHz CPU可以执行多少并发操作?20亿循环速度 查找多个集合的交集的最快方法是语言无关的:创建一个HashSet,用最短列表中的数据初始化它,然后依次调用其余列表。您需要从最短列表开始,因为操作的复杂性为+m,其中n是哈希集中的项数,m是另一个列表

我得到5个列表,我需要所有列表的子集

I 200.000整数值 II 30.000整数值 III 10.000整数值 IV 200整数值 用数学术语A n B n C n D.我需要1000个并发用户来完成这项工作

使用c最快的方法是什么? 一个2MHz CPU可以执行多少并发操作?20亿循环速度
查找多个集合的交集的最快方法是语言无关的:创建一个HashSet,用最短列表中的数据初始化它,然后依次调用其余列表。您需要从最短列表开始,因为操作的复杂性为+m,其中n是哈希集中的项数,m是另一个列表中的项数。由于IntersectWith将被调用四次,并且设置初始哈希集的复杂性为On,因此总体复杂性将为

O( n + n+m1 + n+m2 + n+m3 + n+m4)
// ^    ^      ^      ^      ^
// |    |      |      |      |
// |   Intersecting with lists 2..5
// |
// Setting up the initial HashSet<int>

由于总数为O5*n+m1+m2+m3+m4,因此最好的方法是选择最短的列表进行初始设置。

对于一个CPU,您只能执行一个并发操作。@Nolonar关于超读呢?还要注意的是,CPU在实际并行管道中的工作方面非常聪明。根据您使用的定义,实际上很难确定并发程度。它只是将庄园中的任务并行化,这样就只能在外部观察到顺序。请澄清:2MHz还是2GHz?此外,在多核CPU中,您可以设置一个并发引用任务并行库:@Servy如果我没有弄错的话,超线程只是将第二个线程推送到管道中。这两个线程稍微延迟运行,但不是并发运行。@Nolonar,这在某种程度上取决于您对并发的定义。CPU可以从内存中获取一个操作的参数,同时将两个值作为另一个操作同时相加。并发性从外部看不到,但它是存在的。通过超线程,您甚至可以从外部观察到并发性。我不会断言我是这方面的专家,我只是说concurrent有一个模糊的定义,需要澄清。