Processing math: 100%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۱۹:الگوریتم ها:سوال ۳

سوال ۳

می‌دانیم مشکل اصلی ‎Quicksort‎ در پیدا کردن کلید قسمت ‎Partition‎ است. به‌طوری که اگر کلید عنصر مناسبی باشد دو زیر مسئله ما اندازه‌های برابر (و مساوی ‎n2‎) خواهند داشت و اگر کلید عنصر مناسبی از آب در نیاید، رابطه بازگشتی ما کُند خواهد بود.

برای حل این مشکل، علی قسمت انتخاب کلید تابع ‎Parition‎ را (که روی زیرآرایه‌ی‎ n=rl+1 ،‎عنصری ‎A[l..r]‎ اجرا می‌شود)، به صورت زیر می‌نویسد.

  • ابتدا ماکزیمم عناصر آرایه را در ‎O(n)‎ پیدا کن و آن را ‎M‎ بنام.
  • سپس مینیمم عناصر آرایه را در ‎O(n)‎ پیدا کن و آن را ‎m‎ بنام.
  • برای هر عنصر ‎Ai‎ از ‎n‎ عنصر موجود در آرایه (زیر آرایه)، مقدار ‎Ci=Max(MAi,Aim)‎ را حساب کن.
  • عنصری که ‎Ci‎ آن کم‌تر یا مساوی سایر ‎Ci‎ هاست را ‎q‎ بنام ‎(ri=lCqCi)‎‎ و A[q] را عنصر کلید برای ‎Partition‎ قرار بده. یعنی ‎keyA[q]‎.

دقت کنید که کل این رویه ‎۵ مرحله‌ای قرارست جایگزین ‎keyA[random(l..r)]‎ بشود.‎

آیا با این کارِ علی تغییری در بهترین و بدترین زمان اجرای الگوریتم ‎QuickSort‎ به‌وجود می‌آید؟ جواب خود را در صورت لزوم با مثال و رابطه‌بازگشتی و یا اثبات بیان کنید.


ابزار صفحه