2013-02-27 2 views
1

원래 문제는 다음과 같습니다.
-2P31 ~ 2^31-1 (정수)의 1PB 크기를 정렬하려면 각기 1TB의 디스크 공간과 16GB의 메모리 공간이있는 1024 대의 컴퓨터가 있어야합니다. 디스크 속도가 128MB/s (r/w)이고 메모리 속도가 8GB/s (r/w)라고 가정합니다. CPU 시간은 무시할 수 있습니다. 단순화를 위해 네트워크 전송 시간을 무시할 수 있습니다. 필요한 대략적인 시간을 계산하십시오. ~ 1T의 * 4/1백28메가바이트/S = 2^15 초 :현재 위치에서 외부 병합 정렬 시간을 계산하는 방법은 무엇입니까?

디스크 액세스 (2r2w) :

나는 우리가 대략로 10 시간 같이 산출 된 단일 시스템에서 1TB의 데이터를 정렬 할 수 있습니다 외부 종류로 알고 9 시간
Mem 액세스 :
정렬 2^48 정수 64 개 (2^42 개)는 대략 각각 1.3 분이 걸립니다. 그래서 완전히 1.4 시간.
63 웨이 병합에는 수초가 걸리므로 무시됩니다.

하지만 다음 단계는 무엇입니까? 1024T 데이터의 조합은 어떻게됩니까? 나는 이것이 어떻게 계산되는지 전혀 모른다. 그래서 어떤 도움을 주시겠습니까?

+0

32 비트 int 중 1 PB는 2^48이 아니라 2^48 정수를 가짐을 의미합니다. – NovaDenizen

+0

@NovaDenizen 잘 잡습니다. 수정 됨. – NSF

답변

1

2^31은 20 억 (2 "기가")입니다. 따라서 중복 된 숫자와 고정 된 범위가 많이 보입니다. 기수 정렬 (http://en.wikipedia.org/wiki/Radix_sort)을 고려하십시오.

데이터의 부분 집합에 대한 각 프로세서는 'count'배열을 만듭니다 (x [0]은 0 등의 개수를 포함합니다). 그런 다음 모든 결과를 하나의 배열로 병합 할 수 있습니다. 나중에 정렬 된 배열을 "구성"할 수 있습니다.

+0

그런 다음 범위가 2^64이면 어떻게됩니까? 그래, 맞아,하지만 실제로는 외부 병합 정렬을 사용하여 솔루션을 찾고 있어요. – NSF

+0

@NSF 이것은 면접 질문입니까 아니면 실제적인 실제 문제입니까? 면접 질문 인 경우 숫자 (1 테라, 1 테라, 범위 등)는 특정 해결책을 암시하는 방식으로 설정됩니다. 즉, 범위가 2^31 대신 2^64 인 경우 솔루션은 크게 달라집니다. – ElKamina

+0

웹을 방문했을 때 인터뷰 질문이 발견되었습니다. – NSF

관련 문제