1 / 44

مرتب سازي سريع Quicksort

مرتب سازي سريع Quicksort . ساختمان داده ها و الگوريتمها. Quicksort. Hoare در سال 1962 پيشنهاد كرده است از روش تقسيم و حل (Divide & Conquer) استفاده مي كند آرايه را به صورت “در جا” (In Place) مرتب مي كند شبيه مرتب سازي درجي (Insertion Sort) است.

taniel
Download Presentation

مرتب سازي سريع Quicksort

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. مرتب سازي سريع Quicksort ساختمان داده ها و الگوريتمها

  2. Quicksort • Hoare در سال 1962 پيشنهاد كرده است • از روش تقسيم و حل (Divide & Conquer) استفاده مي كند • آرايه را به صورت “در جا” (In Place)مرتب مي كند • شبيه مرتب سازي درجي(Insertion Sort) است. • برخلاف (Merge Sort ) به حافظه اضافي نياز ندارد. • پياده سازي هاي سريعي كه براي آن ارائه شده، باعث بكارگيري وسيع آن در عمل شده است.

  3. تقسيم و حل • تقسيم:يك عضو مثل x از آرايه را انتخاب كرده و آرايه را طوري به دو بخش طوري تقسيم مي كنيم كه يك بخش آن از x كوچكتر و بخش ديگر از x بزرگتر باشند. • حل: به صورت بازگشتي هر كدام از اين دو بخش را مرتب مي كنيم • تركيب: كارخاصي لازم نيست! نكته: هزينه عمل تقسيم خطي است Θ(n)

  4. تقسيم هزينه تقسيم براي آرايه n عضوي برابر Θ(n) است PARTITION(A, p, q)// A[p. . q] x←A[p] // pivot= A[p] i←p for j←p+ 1 to q do if A[j] ≤x then i←i+ 1 swap A[i] ↔A[j] swap A[p] ↔A[i] // final place of pivot! return i

  5. مثال

  6. مثال

  7. مثال

  8. مثال

  9. مثال

  10. مثال

  11. مثال

  12. مثال

  13. مثال

  14. مثال

  15. شبه كد الگوريتم مرتب سازي QUICKSORT(A, p, r) if p< r then q←PARTITION(A, p, r) QUICKSORT(A, p, q–1) QUICKSORT(A, q+1, r) Initial call:QUICKSORT(A, 1, n)

  16. آناليز الگوريتم • فرض كنيد تمام اعضاي آرايه غير تكراري هستند. • در عمل معمولا روشهاي مناسبتري براي تقسيم آرايه هايي كه اعضاي تكراري دارند، استفاده مي شود • فرض كنيد T(n) هزينه مرتب سازي آرايه اي به طول n با استفاده ازاين الگوريتم در بدترين حالت باشد. • معمولا بهترين حالت الگوريتمها را در نظر نمي گيريم اما براي مرتب سازي سريع اين حالت را نيز بررسي مي كنيم.

  17. بدترين حالات quicksort • آرايه از قبل مرتب شده باشد. • تقسيم حول مقدار مينيمم يا ماكزيمم صورت گيرد. • يكي از دو بخش بدست آمده از تقسيم، هيچ عضوي نداشته باشد. • T(n) = T(0) + T(n-1) + Θ(n) = Θ(1) + T(n -1) + Θ(n) = T(n-1) + Θ(n)  n + n-1+ …+1 = Θ(n2)

  18. درخت هزينه بدترين حالت

  19. درخت هزينه بدترين حالت

  20. درخت هزينه بدترين حالت

  21. درخت هزينه بدترين حالت

  22. درخت هزينه بدترين حالت

  23. درخت هزينه بدترين حالت

  24. درخت هزينه بدترين حالت

  25. بهترين حالت • در بهترين حالت، دو بخش تقسيم شده تقريبا هم اندازه هستند و اندازه مساله در هر بار تقسيم نصف مي شود: T(n) = 2T(n/2) + Θ(n)  Θ(n log n) (mergesort) • سوال: اگر تقسيم طوري صورت بگيرد كه 90% اعضاي آرايه در يك بخش و %10 در بخش ديگر قرار بگيرند، هزينه الگوريم چگونه خواهد بود ؟ • T(n) = T(n/10) + T(9n/10)+ Θ(n)

  26. 10% 90%

  27. 10% 90%

  28. 10% 90%

  29. 10% 90%

  30. 10% 90%

  31. 10% 90%

  32. 10% 90%

  33. حالتي ديگر • فرض كنيد، به صورت متوالي در هربار تقسيم، آرايه بطور متوازن و نامتوازن تقسيم شود. حالت متوازن را Lucky و حالت نا متوازن را unlucky مي ناميم و هزينه الگوريتم را محاسبه مي كنيم • L(n) = 2U(n/2) + Θ(n)  Lucky step • U(n) = L(n -1) + Θ(n)  Unlucky step • L(n) = 2(L(n/2-1) + Θ(n/2)) + Θ(n) • L(n) = 2L(n/2 -1) + Θ(n)  L(n) = Θ(nlogn)

  34. Randomized Quicksort • عمل تقسيم نقش اصلي را در تعيين هزينه الگوريتم دارد • چگونه تقسيم متوازني انجام دهيم؟ • يا، چگونه مي توانيم اميدوار باشيم اغلب تقسيم ها متوازن هستند؟ • انتخاب تصادفي عضو نشانگر pivot • زمان اجرا مستقل از مقادير و توزيع وروديهاست • هيچ ورودي خاصي سبب شكل گيري بدترين حالت الگوريتم نمي شود • احتمال وقوع بدترين حالت تنها به مولد اعداد (شبه) تصادفي بستگي دارد

  35. شبه كد الگوريتم تقسيم تصادفي انتخاب تصادفي عضو نشانگر pivot RANDOM-PARTITION(A, p, q)// A[p. . q] k ← random-number (p..q) swap A[p] , A[k] x←A[p] // pivot= A[p] i←p for j←p+ 1 to q do if A[j] ≤x then i←i+ 1 swap A[i] ↔A[j] swap A[p] ↔A[i] // final place of pivot! return i

  36. آناليز مرتب سازي با تقسيم تصادفي • با انتخاب تصادفي نشانگر؛ آرايه اي به طول n ممكن است به صورت{0:n-1} ; {1,n-2}; …; {n/2 :n/2} تقسيم شود. • فرض كنيد الگوريتم تقسيم دو بخش k:n-k-1 را توليد مي كند كه در آن k=0,1,…, n-1 است. • متغير تصادفي Xk را چنين تعريف مي كنيم: • Xk=1 اگر طول دوبخش k:n-k-1 باشد؛ در غير اينصورت، Xk =0. • Xk را متغير تصادفي نشانگر (Indicator Random Variable)مي گويند. • E[Xk] = P(Xk =1) = 1/n

  37. آناليز مرتب سازي با تقسيم تصادفي • هزينه، برابربا اميد رياضي تابع تصادفي T(n) است: هزينه = E[T(n)]

  38. آناليز مرتب سازي با تقسيم تصادفي اين دو سري، متقارن هستند جايگذاري اميد رياضي، تابعي خطي است Xk و T(k) از هم مستقل هستند E(Xk) = 1/n

  39. آناليز مرتب سازي با تقسيم تصادفي if k=0 or k =1  E(T(K)) = 2/nΘ(n2) = Θ(n)

  40. آناليز مرتب سازي با تقسيم تصادفي بعنوان تمرين ثابت كنيد حدس مي زنيم، هزينه الگوريتم از مرتبه n log n باشد. براي اثبات اين حدس بايد نشان دهيم: ثابت a را مي توان يافت، بنحوي كه:‌ E(T(n)) <= a n log n

  41. آناليز مرتب سازي با تقسيم تصادفي جايگذاري حدس براي هر كدام از جملات سري جايگذاري رابطه قبلي به جاي سري بالا

  42. آناليز مرتب سازي با تقسيم تصادفي به ازاي برخي مقادير a مثبت است E(T(n)) <= a n log n if an/4 > Θ(n) پس، با انتخاب مناسب a مي توان كران بالايي از مرتبه n log n پيدا كرد. E(T(n)) = Θ(n log n)

  43. بحث و بررسي • الگوريتم quicksort تصادفي، از نظر هزينه با mergesort هم رتبه است. • چون نيازي به حافظه اضافي ندارد، معمولا انتخاب اول براي مرتب سازي است. • در عمل اين الگوريتم بين 3 تا 9 برابر سريعتر از mergesort اجرا مي شود.

  44. تمرين • در پروژه 1، مقايسه الگوريتم هاي مرتب سازي، quicksort معمولي و تصادفي را نيز پياده سازي كرده، با بقيه مقايسه كنيد. • مسايل 7-1 تا 7-5 را حل و ارسال كنيد

More Related