1 / 27

Lecture 12 مرتب ساز ي و ادغام فايلها (Sorting and Merging files) (Sections 8.3 - 8.5)

Lecture 12 مرتب ساز ي و ادغام فايلها (Sorting and Merging files) (Sections 8.3 - 8.5). مرتب ساز ي و ادغام فايلها (Sort and Merge of files). کاربرد ها ي ديگ ر پردازش همزمان ( Co-sequential processing ) کدامند؟ الگوريتم ادغام چندتايي ( K-way Merge ) چگونه است؟

hop
Download Presentation

Lecture 12 مرتب ساز ي و ادغام فايلها (Sorting and Merging files) (Sections 8.3 - 8.5)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 12مرتب سازي و ادغام فايلها (Sorting and Merging files)(Sections 8.3 - 8.5)

  2. مرتب سازي و ادغام فايلها(Sort and Merge of files) • کاربرد هاي ديگر پردازش همزمان (Co-sequential processing) کدامند؟ • الگوريتم ادغام چندتايي (K-wayMerge) چگونه است؟ • روش مرتب سازيSelection Treeچيست؟ • روش مرتب سازيHeap Sortچگونه است؟ • روش Overlappingدر Heap Sortچگونه است؟ • مرتب سازي فايلهاي بزرگ چه مشکلاتي دارد؟ • روش مرتب سازيMerge-Sortچيست؟

  3. مرتب سازي و ادغام فايلها(Sort and Merge of files) کاربرد هاي ديگر پردازش همزمان کدامند؟(Co-sequential processing) • الگوريتم ادغام چندتايي (K-wayMerge) • روش مرتب سازيSelection Tree • روش مرتب سازيMerge-Sort الگوريتم ادغام چندتايي (K-way) چگونه است؟ • ادغام تعداد K ليست مرتب شده و توليد يک ليست واحد (مرتب شده). • تعميم الگوريتم قبلي (2-way). • تعريف برداري با تعداد K ليست به نام List [K]...List [1] : • تعريف برداري با تعداد K آيتم به نام:item[ K]...item [1]

  4. مرتب سازي و ادغام فايلها الگوريتم ادغام چندتايي (K-way) چگونه است؟ الگوريتم ادغام (با حذف آيتم هاي تکراري): 1)MinItem = set to min of item[1]…item[K] • Output MinItem to output list (ص 309 کتاب) 3) For i=1 to K do: If item[i]= MinItem then Get next item[i] from List[i]

  5. 7, 10, 17.... List 0 7 9, 19, 23.... List 1 7 11, 13, 32.... List 2 11 18, 22, 24.... List 3 input 5 12, 14, 21.... List 4 5 5, 6, 25.... List 5 5 15, 20, 30.... List 6 8 8, 16, 29.... List 7 مرتب سازي و ادغام فايلها روش مرتب سازيSelection Treeچيست؟ • يک الگوريتم ديگر براي ادغام ميبا شد که مشابهمسابقات دوره اي (مثل فوتبال) عمل ميکند. • وقتي تعداد ليست ها بيش از 8 باشد اين الگوريتم ارجحيت دارد.(چرا؟) • مانند يک BinaryTree با عمق Log 2(K) عمل مي کند. مثال:ص 311 کتاب شکل 8.15

  6. A B C E H I D G F 0 1 2 3 4 5 6 7 8 9 A B C E H I D G F مرتب سازي و ادغام فايلها روش مرتب سازيHeap Sortچگونه است؟ • يک الگوريتم مرتب سازي در حافظه (RAM) ميباشد. • Heapيک درخت دودويي کامل است با ارتفاع Height = log n • هر گره (node) يک کليد بيشتر ندارد که بزرگتر يا برابر کليد گره پدر (parent) ميباشد. • بصورت يک آرايه (Array) ذخيره ميشود. • براي هر گره (i) فرزندان آن در گره هاي (2i) و (2i+1) ذخيره شده اند. • پدر هر گره (j) در گره (j/2) ميباشد.

  7. A A F D B D H F … … G … … G H (1) B becomes H’s left child;(2) then B is swapped with H;(3) then B is swapped with F. B مرتب سازي و ادغام فايلها الگوريتم Insert در Heap Sort چگونه است؟ • رکورد جديد درآخرHeap اضافه ميشود. • کليد آن با کليد گره پدر مقايسه مي شود و اگر مقدار آن کوچکتر بود محل آن با محل گره پدر تعويض ميشود. • در صورت لزوم عمل (2) تا ريشه درخت (Root) ادامه مييابد.

  8. الگوريتم Insert در Heap Sort int Heap::Insert(char * newKey) { if (NumElements == MaxElements) return FALSE; NumElements++; // add the new key at the last position HeapArtay[NumElementsJ = newKey; // re-order the heap int k = NumElements; int parent; while (k > 1) //I k has a parent { parent = k / 2; if IComparelk. parent) >= 0) break; // HeapArray[k] is in the ri9ht place // else exchange k and parent Exchange(k , parent); k = parent; } return TRUE; } (ص 314،شکل 8.17)

  9. A B C E H I D G F 0 1 2 3 4 5 6 7 8 9 A B C E H I D G F مرتب سازي و ادغام فايلها الگوريتم Remove در Heap Sort چگونه است؟ • کوچکترين کليد که در گره Root ميباشد خارج ميشود. • بزرگترين کليد (آخرينگره) به گره Rootمنتقلميگردد. • کليد آن با کوچکترين کليد فرزند مقايسه مي شود و اگر بيشتر بود جاي آن دو تعويض ميشود. • در صورت لزوم عمل (3) تا آخرHeap تکرار ميگردد.

  10. الگوريتم Remove در Heap Sort char * Heap::Remove() { //remove the smallest element, reorder the heap, and return the smallest element. put the smallest value into 'val' for use in return char * val = HeapArray[1]; HeapArray[1] = HeapArray[NumElements]; //put largest value into root NumElements--; // decrease the number of elements // reorder the heap by exchanging and moving down int k = 1; // node of heap that contains the largest value int newK; // node to exchange with largest value while (2*k <= NumElements) // k has at least one child { // set newK to the index of smallest child of k if (Compare(2*k, 2*k+1)<0) newK = 2*k; else newK = 2*k+1; if (Compare(k, newK) < 0) break; // done if k and newK are in order Exchange(k, newK); // k and newK out of order k = newK; // continue down the tree } return val; } (ص 317 ، شکل 8.20 )

  11. Total RAM area allocated for heap First input buffer. First part of heap is built here. The first record is added to the heap, then the second record is added, and so forth Second input buffer. This buffer is being filled while heap is being built in first buffer. مرتب سازي و ادغام فايلها روش Overlappingدر Heap Sortچگونه است؟ • اجازه مي دهد اعمال I/O و پردازشرا بموازات يکديگر انجام دهيم. • براي شروع پردازش، نياز نيست که تمام داده ها در حافظه Load شده باشند (input) • براي شروع output نيازي نيست که پردازش داده ها کاملا تمام شده باشد. (ص 316 ، شکل 8.19)

  12. Secondpart of heap is built here. The first record is added to the heap, then the second record, etc Third input buffer. This buffer is filled while heap is being built in second buffer Third part of heap is built here Fourth input buffer is filled while heap is being built in third buffer مرتب سازي و ادغام فايلها روش Overlappingدر Heap Sortچگونه است؟ • اجازه مي دهد اعمال I/O و پردازش را بموازات يکديگر انجام دهيم. • براي شروع پردازش،نياز نيست که تمام داده ها در حافظه Load شده باشند (input) • براي شروع outputنيازي نيست که پردازش داده ها کاملا تمامشده باشد.

  13. مرتب سازي و ادغام فايلها روش مرتب سازيMerge-Sortچيست؟ چرا از Merge براي مرتب سازي فايلهاي بزرگاستفاده ميشود؟ مرتب سازي فايلهاي بزرگ چه مشکلاتي دارد؟ مثال: • فايلي با مشخصات زير در نظر مي گيريم: • تعداد رکوردها: 8000000 • طول هر رکورد: 100 بايت • طول کليد: 10 بايت • فرض کنيم که حافظه قابل استفاده براي sort محدود به 10 مگا بايت باشد

  14. Seagate cheetah9 disk drive (seek + Rotational delay) مرتب سازي فايلهاي بزرگ مرتب سازي فايلهاي بزرگ چه مشکلي دارد؟ مثال (ادامه...): • چه مشکلي برای مرتب سازی وجود دارد؟ • حافظه لازم براي کل فايل 800 مگابايت ميباشد • حافظه لازم فقطبرايکليد هاي فايل80مگا بايت ميباشد • مرتب سازي روي ديسک بسيار طولاني خواهد بود. • زمان لازم براي فقط يکبار خواندن بطور Random برابر با: • 11 msec * 8000000يا 88000 ثانيه • يا بيش از24 ساعت (24:26:40) خواهد بود

  15. 8,000,000 unsorted records 80 internal sorts 80 runs, each containing 100,000 sorted records ……….. Merge 8,000,000 records in sorted order مرتب سازي فايلهاي بزرگ مثال (ادامه...): • چهراه حلي برای اين مشکلات وجود دارد؟ • هر تعداد رکورد که حافظه اجازه دهد به حافظه آورده ، مرتب نموده (internal) و سپس در يک فايل کوچکتر بنويسيم. • عمل (1) را تا آخر فايل ادامه دهيم.(ص 320، شکل 8.21 ) • فايل هاي بدست آمده را با هم ادغام کنيم

  16. مرتب سازي فايلهاي بزرگ مثال (ادامه...): • تعداد دفعات مرتب سازي (RUN) ؟ • ظرفيت حافظه: 10000000 بايت • اندازه هر رکورد: 100 بايت • تعداد رکوردها در هر دفعه (RUN) :100000=100/10000000 • تعداد کل دفعات (RUN):80=100000/8000000

  17. 10MB file 1st run = 80 buffers’  (80 accesses) 800MB file 2nd run = 80 buffers’  (80 accesses) 8,000,000 sorted records : : 80 buffers(10MB) 80th run = 80 buffers’  (80 accesses) مرتب سازي فايلهاي بزرگ مثال (ادامه...): • اندازهقطعه اي که از هر فايل ميتوان هنگام Merge به حافظه آورد چقدر است؟ 10000000/80 = 125000بايت = 1250رکورد (چرا؟) (ص 322، شکل 8.22 )

  18. مرتب سازي فايلهاي بزرگ مثال (ادامه...): محاسبه زمانها چگونه است؟ • زمان خواندنرکوردها (براي تشکيلفايلهاي کوچکتر) چقدر است؟ • زمان دسترسي کل: 80 seeks * 11 msec = 1 sec(چرا؟) • زمان انتقال کل: 800 MB @ 14500 B/msec =60 sec • زمانکلخواندن رکوردها: sec61 • زماننوشتن رکوردها (در فايلهاي کوچک) چقدر است؟ • برابر است باهمانزمان خواندن رکوردها: 61 sec(چرا؟)

  19. مرتب سازي فايلهاي بزرگ مثال (ادامه...): محاسبه زمانها چگونه است؟ • زمان خواندن قطعات فايل هاي کوچک )براي Merge (چقدر است؟ • هر فايل کوچک به 80 قطعه تقسيم مي شود (يعني 80 جستجوياseek) • تعداد کل جستجو (seek): 6400=80*80 • زمان کل جستجو: sec70 = msec11* 6400 • زمان کل انتقال همان 60 ثانيه (مانند قبل)(چرا؟) • زمان کل خواندن قطعات به ثانيه:130 = 70+60

  20. 1 +60 1+60 60 +70 60+44 مرتب سازي فايلهاي بزرگ مثال (ادامه...): محاسبه زمانها چگونه است؟ • زمان نوشتن نتايجMerge روي ديسک چقدر است؟ • فرض کنيم که اندازه بافر I/O براي write برابر با 200000 بايت باشد • تعداد کل دفعات جستجو seeks :4000 = 200000 / 800000000 • زمان کل جستجو: sec44=11 * 4000 • زمان کل انتقال همان 60ثانيه (چرا؟) • زمان کل نوشتن نتايجMergeبه ثانيه:104 = 44 + 60 • زمانکل عملياتSort-Merge چقدر است؟ sec356 = 104 + 130 + 61 + 61

  21. مرتب سازي فايلهاي بزرگ (ص 323، جدول 8.1 )

  22. مرتب سازي فايلهاي بزرگ مثال (ادامه...): اگر فايل ده برابربزرگتر باشد چطورميشود؟ • زمان خواندن رکوردهابراي Sort در فايلهاي کوچک چقدر است؟610 ثانيه(چرا؟) • زمان نوشتن رکوردهابراي Sort در فايلهاي کوچک چقدر است؟ 610 ثانيه (چرا؟) • زمان نوشتننتايجMergeچقدر است؟ 1040ثانيه(چرا؟) • زمان خواندن قطعاتفايلهای کوچکبراي Mergeچقدر است؟

  23. مرتب سازي فايلهاي بزرگ مثال (ادامه...): اگر فايل ده برابربزرگتر باشد چطورميشود؟ • زمان خواندن قطعات فايلهاي کوچک براي Merge چقدر است؟ • هر فايل کوچک به 800 قطعه تقسيم مي شود (يعني 800 جستجو ياseek) • تعداد کلجستجو (seek): 640000=800*800 • زمان کل جستجو: sec7040= msec11*640000 • زمان کل انتقال: sec600(چرا؟) • زمان کلخواندن قطعاتبراي Merge : 7640 ثانيه (بيش از دو ساعت) (مقايسه اين زمان با حالت قبلي؟)

  24. مرتب سازي فايلهاي بزرگ چه روش هاييبرایبهبود زمان مرتب سازي فايلهاي بزرگ وجود دارد؟ • چه روش هاي سخت افزاري برایبهبود زمان مرتب سازي وجود دارد؟ • بالا بردن ظرفيت حافظه RAM • بالا بردن تعداد ديسک ها و تقسيم فايلها روي ديسک هاي مختلف.(چرا؟) • (براي پايين آوردن seek time) • بالا بردن تعداد کانالهاي(I/O Channels) • مثلا به جاي ديسک هايMaster-Slaveهمه Master باشند • و همزمان نمودن I/O روي کانالهاي مختلف (I/O overlapping)

  25. مرتب سازي فايلهاي بزرگ چه روش هاييبرایبهبود زمان مرتب سازي فايلهاي بزرگ وجود دارد؟ • چه روش هاي نرم افزاري بهبود زمان مرتب سازي وجود دارد؟ • استفاده از روش ادغام چند مرحله اي (Multiple-step Merge) • مثال: در فايل قبلي به جاي اينکه تمام 800 فايل کوچک را يکجا با هم ادغام کنيم • مي توانيم آنها را به 25دسته32 تايي تقسيم کرده • و در مرحله اوّل براي هر دسته يک ادغام 32-way انجام دهيم • و سپس در مرحله دوم يک ادغام25-way انجام دهيم.

  26. 25 sets of 32 runs each … … … … … 32 runs 32 runs … 1 2 3 25 Two-step merge of 800 runs مرتب سازي فايلهاي بزرگ استفاده از روش ادغام چند مرحله اي (Multiple-step Merge) مزايا: • تعداد فايلها در هر مرحله کمتر • و در نتيجه اندازه قطعات در حافظه بزرگتر مي شود • و به تعداد کمتريseek احتياج خواهد بود • و در نتيجه زمان لازم براي Mergeکمتر خواهد شد. (ص 330، شکل 8.23 )

  27. مرتب سازي فايلهاي بزرگ (ص 331 ، جدول 8.3 )

More Related