我得到 5 个列表,我需要所有列表的子集。
- I) 200.000 个整数值
- II) 30.000 个整数值
- III) 10.000 个整数值
- IV) 200 个整数值
用数学术语 A n B n C n D。我需要 1.000 个并发用户。
- 用 c#最快的方法是什么?
- 我可以用一个 2 mhz CPU 执行多少个并发操作?20亿循环速度
我得到 5 个列表,我需要所有列表的子集。
用数学术语 A n B n C n D。我需要 1.000 个并发用户。
处理查找多个集合的交集的最快方法是与语言无关:创建一个HashSet<int>
,用最短列表中的数据对其进行初始化,然后依次调用IntersectWith
其余列表。您需要从最短的列表开始,因为操作的复杂性是O(n+m)
,其中n
是 中的项目数HashSet<int>
,而m
是另一个列表中的项目数。由于IntersectWith
将被调用四次,并且设置初始的复杂度HashSet<int>
为O(n)
,因此整体复杂度为
O( n + n+m1 + n+m2 + n+m3 + n+m4)
// ^ ^ ^ ^ ^
// | | | | |
// | Intersecting with lists 2..5
// |
// Setting up the initial HashSet<int>
由于总数是O(5*n+m1+m2+m3+m4)
,因此最好的方法是选择最短的列表来制作初始集合。