2013-05-09 47 views
-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十億循環速度
+2

使用** one ** CPU時,您只能執行**一個** *併發*操作。 – Nolonar 2013-05-09 16:52:50

+0

@Nolonar超線程呢?還要注意CPU在管道中實際上並行化工作非常聰明。根據您使用的定義,確定併發程度確實很難。它只是將一個莊園中的任務並行化,以至於只能被視爲是外部連續的。 – Servy 2013-05-09 16:53:41

+1

請澄清:2MHz還是2GHz?另外,在多核CPU中,您可以設置併發性(請參閱任務並行庫:http://msdn.microsoft.com/en-us/library/dd460717.aspx) – 2013-05-09 16:54:11

回答

0

處理髮現的多個集合的交集的最快方法是語言無關的:創建一個HashSet<int>,從最短的列表中的數據進行初始化,然後依次呼籲其餘名單IntersectWith 。您需要從最短的列表開始,因爲操作的複雜性爲O(n+m),其中nHashSet<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),最好的辦法是選擇最短的列表,讓你的初始設定。

相關問題