5.*7 ExternalSorting
đôi khi dữ liệu là rất lớn như vậy mà nó không không fit vào bộ nhớ. Trong phần này, chúng tôi sẽ tìm hiểu làm thế nào để sắp xếp các bộ dữ liệu trong mô hình bộ nhớ ngoài giới thiệu trong phần 2.2. Nó phân biệt giữa một bộ nhớ nhanh trong kích thước M và một bộ nhớ ngoài lớn. Dữ liệu được di chuyển trong hệ thống phân cấp bộ nhớ trong khối lượng sinh Quét dữ liệu nhanh ở bên ngoài bộ nhớ và mergesort dựa trên quét. Chúng tôi do đó có mergesort như là điểm khởi đầu cho bộ nhớ ngoài phân loại. Giả sử các đầu vào được đưa ra như là một mảng trong bộ nhớ ngoài. Chúng tôi mô tả một thực hiện nonre-cursive cho trường hợp số lượng các yếu tố n là số chia hết cho sinh WeloadsubarraysofsizeM intointernalmemory, sortthemusingourfavoritealgo-rithm, Ví dụ:, qSort, và ghi được sắp xếp subarrays quay lại bộ nhớ ngoài. Chúng tôi đề cập đến subarrays được sắp xếp như chạy. Giai đoạn hình thành chạy mất n/B khối lần đọc và n/B blockwrites,i.e.,atotalof 2n/B I/Os.Thenwemergepairsofrunsintolarger chạy trong dlog(n/M) e kết hợp giai đoạn kết thúc với một đĩa đơn được sắp xếp chạy. Con số 5.14 cho một ví dụ cho n = 48 và chạy của chiều dài mười hai. Làm thế nào để chúng tôi có thể hợp nhất hai chạy? Chúng tôi giữ một khối từ mỗi của hai chạy đầu vào và đầu ra chạy trong bộ nhớ. Chúng tôi gọi các bộ đệm khối. Ban đầu, bộ đệm đầu vào là filled với các yếu tố chính B của chạy đầu vào và sản lượng đệm là sản phẩm nào. Chúng tôi so sánh các yếu tố hàng đầu của bộ đệm đầu vào và di chuyển một nhỏ hơn để các bộ đệm đầu ra. Nếu một bộ đệm đầu vào trở nên trống rỗng, chúng tôi lấy khối tiếp theo của đầu vào tương ứng chạy, nếu các bộ đệm đầu ra là đầy đủ, chúng tôi ghi nó vào bộ nhớ ngoài. Mỗi giai đoạn hợp nhất đọc tất cả hiện tại chạy và viết mới tập hai lần chiều dài. Do đó mỗi giai đoạn cần n/B khối lần đọc và viết n/B khối. Tổng hợp trên tất cả các giai đoạn, chúng tôi có được 2n/B(1 dlogn/Me) I/Os. Các công trình kỹ thuật cung cấp rằng M ≥ 3B.
120 5 phân loại và lựa chọn
MultiwayMergesort
nói chung, bộ nhớ có thể chứa nhiều khối và không chỉ là ba. Chúng tôi sẽ de-scribe làm thế nào để sử dụng đầy đủ bộ nhớ có sẵn trong thời gian qua việc sáp nhập. Mục đích là để hợp nhất nhiều hơn là chỉ hai chạy; Điều này sẽ làm giảm số lượng các giai đoạn. Trong k-cách sáp nhập, chúng tôi kết hợp trình tự k được sắp xếp thành một đầu ra duy nhất. Trong mỗi bước chúng tôi nhiều chuỗi đầu vào với các yếu tố chính nhỏ nhất. Nguyên tố này loại bỏ và thêm vào chuỗi sản lượng. Bộ nhớ ngoài thực hiện là dễ dàng miễn là chúng tôi có đủ bộ nhớ cho k bộ đệm đầu vào khối, một đầu ra bộ đệm khối, và một lượng nhỏ lưu trữ bổ sung. Cho mỗi chuỗi, chúng ta cần phải nhớ yếu tố mà chúng tôi đang hiện con-sidering. Để nhiều phần tử nhỏ nhất trong số tất cả k trình tự, chúng tôi giữ elementsinapriorityqueue hiện tại của họ.Apriorityqueuemaintainsasetofelementssupporting hoạt động chèn và xoá tối thiểu. Chương 6 giải thích như thế nào trước khi-ityqueuescanbeimplementedsothatinsertionanddeletiontaketimeO (logk) ngã ba yếu tố.Thepriorityqueuetellsusineachstepwhichsequencecontainsthesmall-est nguyên tố. Chúng tôi xóa nó từ hàng đợi ưu tiên, di chuyển nó vào bộ đệm đầu ra, và insertthenextelementfromthecorrespondinginputbufferintothepriorityqueue.Nếu một bộ đệm đầu vào chạy khô, chúng tôi lấy khối tiếp theo của dãy tương ứng và nếu bộ đệm đầu ra trở nên đầy đủ, chúng tôi viết nó vào bộ nhớ bên ngoài. Lớn như thế nào chúng tôi có thể chọn k? Chúng ta cần phải giữ cho k 1 khối trong bộ nhớ và chúng tôi cần một ưu tiên hàng đợi cho k phím. Vì vậy, chúng ta cần (k 1) B O(k) ≤ M hoặc k = O(M/B). Số lượng kết hợp giai đoạn giảm xuống còn dlogk(n/M) e và do đó trở thành tổng số I/Os
2
n B³1 llogM/B n Mm´. (5.1) sự khác biệt để sáp nhập nhị phân là cơ sở lớn hơn nhiều của logarit. Lãi suất-ingly, phía trên ở trên hướng đến sự I/O-phức tạp của isalso phân loại một ràng buộc thấp hơn [4],i.e.,underfairlygeneralassumptions,noexternalsortingalgorithmwithlessI/O hoạt động có thể. Inpractice, thenumberofmergephaseswillbeverysmall.Observethatasingle kết hợp giai đoạn suffices miễn là n ≤ M2/sinh Chúng tôi chính tạo thành M/B tập dài M mỗi và sau đó hợp nhất các chạy vào một chuỗi duy nhất được sắp xếp. Nếu bộ nhớ là viết tắt của DRAMs, và bộ nhớ ngoài là viết tắt của đĩa này bị ràng buộc vào n là không hạn chế thực tế cho tất cả các hệ thống thực tế configurations. Exercise101. Hiển thị rằng mergesort multiway cần chỉ O(nlogn) yếu tố com-parisons. Exercise102 (cân bằng hệ thống). Nghiên cứu giá cả thị trường hiện tại của máy tính, bộ nhớ, và khối lượng lưu trữ (hiện nay là đĩa cứng). Cũng ước tính khối sizeneededtoachievegoodbandwidthforI/O.Canyoufindanyconfigurationwhere multi-waymergesortwouldrequiremorethanonemergingphaseforsortinganinput filling tất cả các đĩa trong hệ thống? Nếu vì vậy, phần của hệ thống chi phí nào bạn có thể chi ngày bổ sung bộ nhớ nội bộ để trở lại một pha merging?
9.2 * bên ngoài phân loại 121
SampleSort thuật toán phân loại phổ biến nhất bộ nhớ không phải là mergesort nhưng hay Hoaresort. Vì vậy, nó là tự nhiên để tìm một bộ nhớ ngoài phân loại các thuật toán dựa trên nhanh chóng-loại.WewillsketchSamplesort.Ithasthesameperformanceguaranteeasmultiway mergesort (biểu hiện 5.1), Tuy nhiên chỉ trong kỳ vọng và không tồi tệ nhất trường hợp. Nó là dễ dàng hơn để thích ứng với song song đĩa và bộ vi xử lý song song hơn qua việc hợp nhất dựa trên al-gorithms. Hơn nữa, tương tự như thuật toán có thể được sử dụng để phân loại nhanh bên ngoài của các phím số nguyên dọc theo dòng của phần 5,6. Thay vì các yếu tố duy nhất trục hay Hoaresort, chúng tôi bây giờ sử dụng k − 1 splitter el-ements s1,..., sk−1 để tách một chuỗi đầu vào vào k đầu ra trình tự hoặc Xô. Xô tôi được yếu tố e với si−1 ≤ e < si. Để đơn giản hóa vấn đề chúng tôi define artificial splitter s0 = −∞and sk = ∞and chúng tôi giả định rằng tất cả các yếu tố có c-ferentkeys.Thesplittersshouldbechoseninsuchawaythatthebucketshaveasize ofroughly n/k.Thebucketsarethensortedrecursively.Inparticular,bucketsthatfit vào bộ nhớ nội bộ sau đó có thể được sắp xếp trong nội bộ. Lưu ý sự tương tự với MSB-sau loại trong phần 5,6. Thách thức chính là nhiều tốt splitter một cách nhanh chóng. Mẫu loại sử dụng một chiến lược ngẫu nhiên nhanh chóng và đơn giản. Với một số số nguyên a, chúng tôi ngẫu nhiên chọn ak k − 1 sampleelementsfromtheinput.ThesampleS isthensortedinternallyandwedefine splitter là si = S [(a 1) tôi] với 1 ≤ tôi ≤ k − 1, nghĩa là, sau đó splitter là separatedbyasamples,thefirstsplitterisprecededbyasamples, andthelastsplitter isfollowedbyasamples.Takinga = 0resultsinasmallsampleset, butsplittingwill không rất tốt. Di chuyển tất cả các yếu tố để mẫu sẽ dẫn đến hoàn hảo splitter, nhưng mẫu là quá lớn. Các phân tích cho thấy rằng thiết lập một = O(logk) đạt được kích thước đương Xô với chi phí thấp cho lấy mẫu và phân loại mẫu. Phần đặt I/O-tăng cường của mẫu loại là k-cách phân phối các chuỗi đầu vào để các Xô. Chúng tôi giữ cho đệm một khối dành cho chuỗi đầu vào và một bộ đệm khối cho mỗi nhóm. Các bộ đệm được xử lý cũng để khối bộ đệm trong k-cách hợp nhất. Nếu các Splitter được lưu giữ trong một mảng được sắp xếp, chúng tôi có thể nhiều thùng đúng cho một yếu tố đầu vào e timeO(logk) bằng cách sử dụng tìm kiếm nhị phân. Theorem21. Mẫu phân loại các loại đầu vào n bằng cách sử dụng O³n B³1 llogM/B n Mm´´ I/O mong đợi. Công việc nội bộ isO(nlogn). Chúng tôi rời khỏi chứng minh chi tiết để đọc và giải thích chỉ là thành phần quan trọng của việc phân tích. Chúng tôi sử dụng k = Θ(min(n/M,M/B)) Xô và một mẫu kích thước O(klogk).Thefollowinglemmashowsthatwiththissamplesize, itisunlikelythat bất kỳ Xô có kích thước lớn hơn nhiều hơn mức trung bình. Chúng tôi ẩn các yếu tố liên tục phía sau O (•)-ký hiệu vì phân tích của chúng tôi không phải là rất chặt chẽ trong sự tôn trọng này. Lemma16. Hãy để k ≥ 2 và 1 = 12lnk. Một mẫu kích thước (một 1) k −1 suffices để đảm bảo rằng không có xô nhận được nhiều hơn 4n/k yếu tố với xác suất tối thiểu 1/2.
122 5 phân loại và lựa chọn
bằng chứng. Như trong phân tích của chúng tôi hay Hoaresort (định lý 18), nó là hữu ích để nghiên cứu được sắp xếp Phiên bản s0 = he0 1,..., e0niof các đầu vào. Giả sử có một xô với ít 4n/kelements được giao. Chúng tôi ước tính xác suất của sự kiện này. Chúng tôi chia s0 vào k/2 phân đoạn của chiều dài 2n/k. J-th phân khúc tj chứa elementse0 2jn/k 1 toe02(j 1) n/k.If4n/k elementsendupinsomebuckettheremust là một số tj phân khúc như vậy mà tất cả các yếu tố của nó sẽ chỉ trong thùng cùng. Điều này chỉ có thể xảy ra nếu ít hơn một mẫu 1 được lấy từ tj bởi vì nếu không ít nhất một splitter sẽ được lựa chọn từ tj và các yếu tố không sẽ kết thúc trong một xô duy nhất. Hãy cho chúng tôi tập trung vào một fixed j. WeuserandomvariableX todenotethenumberofsamplestakenfromtj.Nhớ lại rằng chúng tôi có (1) k −1 mẫu. Cho mỗi mẫu i, 1 ≤ tôi ≤ (1) k −1, chúng tôi define một chỉ số biến Xi Xi = 1 nếu mẫu i-th được lấy từ tj và Xi = 0 nếu không. Sau đó X = P1≤i≤(a 1) k−1 Xi. Ngoài ra, của Xi được độc lập và prob(Xi = 1) = 2/k. độc lập cho phép chúng tôi sử dụng cái gọi là Chernoff ràng buộc (A.5) toestimatetheprobabilitythatX < một 1.WehaveE [X] = ((a 1) k− 1) •2 k = 2(a 1) −2/k ≥ 3 (1)/2.HenceX một < 1impliesX một < (1−1/3) E [X] và do đó, chúng tôi có thể sử dụng (A.5) với ² = 1/3. Do đó prob (X < một 1) ≤ e−(1/9) E [X] / 2 ≤ e−(a 1)/12 = e−lnk = 1 k. Xác suất mà một số insufficient mẫu được chọn từ một tức fixed là như vậy tối đa là 1/k và do đó khả năng rằng một số insufficient được chọn fromsome tj isatmost(k/2)•(1/k) = 1/2.Thuswithprobabilityatleast 1/2, mỗi nhóm sẽ nhận được ít hơn 4n/k yếu tố. Exercise103. WorkoutthedetailsofanexternalmemoryimplementationofSample loại. Đặc biệt, giải thích làm thế nào để thực hiện nhiều cách phân phối sử dụng 2n/B k 1 I/O bước nếu bộ nhớ là đủ lớn để lưu trữ k 1 khối dữ liệu andO(k) thành phần bổ sung. Exercise104 (nhiều người bằng phím). Giải thích làm thế nào để khái quát multiway phân phối sothatitstillworksifsomekeysoccur rất thường xuyên.Gợi ý: thereareatleasttwodiffer - ent giải pháp. Một sử dụng mẫu để nhiều ra yếu tố được thường xuyên. Một giải pháp làm cho tất cả các yếu tố duy nhất của giải thích một e phần tử lúc đầu vào vị trí tôi như các cặp (e, tôi). * Exercise105(Moreaccurat
đang được dịch, vui lòng đợi..