-4
我得到5個列表,我需要所有的子集。c#獲取整數列表子集的最快方法
- I)200.000整數值
- II)30.000整數值
- III)10.000整數值
- IV)200整數值
在數學術語甲Ñ乙n C n D.我需要做這個1.000個併發用戶。
- 什麼是用C#這樣做的最快的方式?
- 多少併發操作我可以做一個2 mhz CPU嗎? 2十億循環速度
我得到5個列表,我需要所有的子集。c#獲取整數列表子集的最快方法
在數學術語甲Ñ乙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)
,最好的辦法是選擇最短的列表,讓你的初始設定。
使用** one ** CPU時,您只能執行**一個** *併發*操作。 – Nolonar 2013-05-09 16:52:50
@Nolonar超線程呢?還要注意CPU在管道中實際上並行化工作非常聰明。根據您使用的定義,確定併發程度確實很難。它只是將一個莊園中的任務並行化,以至於只能被視爲是外部連續的。 – Servy 2013-05-09 16:53:41
請澄清:2MHz還是2GHz?另外,在多核CPU中,您可以設置併發性(請參閱任務並行庫:http://msdn.microsoft.com/en-us/library/dd460717.aspx) – 2013-05-09 16:54:11