2013-05-09 3 views
-4

나는 5 개의 목록을 얻고 모두의 하위 집합이 필요합니다.정수 목록의 하위 집합을 얻는 가장 빠른 방법

  • I) 200.000 정수 값
  • II) 30.000 정수 값
  • III) 10.000 정수 값
  • IV) (200)의 정수 연산 조건 N B

값 n C n D.이 1.000 명의 동시 사용자를 수행해야합니다.

  • 가장 빠른 방법은 무엇입니까?
  • 얼마나 많은 작업을 2 메가 헤르츠 CPU 하나로 수행 할 수 있습니까? 20 억 사이클 속도
+2

** 하나 ** CPU를 사용하면 ** 한 ** ** 동시 * 작업 만 수행 할 수 있습니다. – Nolonar

+0

@Nolonar 하이퍼 스레딩은 어떨까요? 또한 CPU는 실제로 파이프 라인에서 작업을 병렬 처리하는 것에 매우 영리합니다. 실제로 사용하는 정의에 따라 동시성의 정도를 결정하는 것이 실제로 어려울 수 있습니다. 단순히 외부에서 순차적으로 만 관찰 할 수있는 방식으로 작업을 병렬 처리합니다. – Servy

+1

명확히하십시오 : 2MHz 또는 2GHz? 또한 멀티 코어 CPU에서 동시성을 설정할 수 있습니다 (작업 병렬 라이브러리 참조 : http://msdn.microsoft.com/en-us/library/dd460717.aspx) –

답변

0

여러 세트의 교차점을 찾는 다루는 가장 빠른 방법은 언어에 독립적이다하는 HashSet<int>를 만들 짧은 목록에서 데이터를 초기화 한 후 순차적으로 나머지 목록에 IntersectWith 전화 . 작업의 복잡도는 O(n+m)이고, 의 항목 수는 n이고 다른 목록의 항목 수는 m입니다. 가장 짧은 목록부터 시작해야합니다. IntersectWith이 네 번 호출하고, 초기 HashSet<int>를 설정의 복잡성이 O(n)입니다되기 때문에 전체가 O(5*n+m1+m2+m3+m4) 때문에, 전체적인 복잡성은 가장 좋은 방법은 만들기위한 가장 짧은 목록을 선택하는 것입니다,

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

을하게 될 초기 설정.

관련 문제