موضوع مقاله: مرتب‌سازی شکیبانه | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # مرتب‌سازی شکیبانه | مقدمه: مرتب‌سازی صبورانه یک الگوریتم مرتب‌سازی است که بر پایهٔ کارت بازی یک نفره‌است وخاصیتی دارد که می‌تواند به طوز مؤثر طول بزرگترین زیر دنباله صعودی در یک آزایهٔ داده شده را محاسبه کند. | ## بخش 1: مرتب‌سازی شکیبانه | ابتدا کارت‌ها ۱ به ۱ مقدار دهی و توزیع می‌شوند که البته این مقدار دهی و توزیع در کپه‌های متوالی و جدا از هم روی میز قرار دارد در ابتدا هیچ کپه‌ای از کارت وجود ندارد و اولین کارت که مقدار دهی و توزیع می‌شود یک کپهٔ جدید به وجود می‌آورد که تنها دارای یک کارت است. هر کارت جدید ممکن است در یکی از دسته‌های (کپه‌های) موجود قرار بگیرد که در هر کدام از این کپه‌ها کارت با مقدار بیشتر در آغاز قرار دارد. بنابراین با افزوده شدن پی در پی کارت‌ها، تعداد کارت‌های آن کپه یا همهٔ دسته‌های موجود افزایش پیدا می‌کند که در نتیجهٔ آن یک دسته جدید شکل می‌گیرد. وقتی که دیگر کارتی وجود ندارد باقی مانده‌ها را بررسی و محاسبه کنید.(پایان بازی) یک مسئله مهم و اساسی در این بازی به اتمام رساندن آن با کمترین تعداد کپه‌های ممکن است. الگوریتم مرتب‌سازی آرایه با یک روش مرتب‌سازی به عنوان ورودی مرتب‌سازی داده شده‌است. به این مسئله به دید جمع‌آوری کارت بنگرید که باید با مرتب‌سازی آماری هر عنصر بر اساس نمایه (index) خود مرتب شود. | ## بخش 2: مرتب‌سازی شکیبانه | نکته: این بازی از مقدار واقعی کارت‌ها فقط برای مقایسه بین دو کارت استفاده می‌نماید که با این کار ارتباط هر دو عنصر دلخواه از آرایه بررسی می‌شود. حال بازی مرتب‌سازی صبورانه را شبیه‌سازی کنید وهر کارت جدید را در چپ‌ترین کپه با رعایت قانون قرار دهید. در هر مرحله از این بازی با این استراتژی برچسب‌های (label) کارت‌های سر (top) از چپ به راست به‌طور صعودی هستند. حال توالی مرتب شده را بازیابی کنید و کارت با کمترین مقدار از سر ستون در هر مرحله جمع‌آوری کنید. پیچیدگی اگر تعداد کارت‌ها در محدودهٔ ، باشد یک پیاده‌سازی کارآمد با در بدترین حالت برای قرار دادن کارت‌ها در کپه‌ها وجود دارد (که برای یک مرتب‌سازی کامل در بدترین حالت است و ) فضا برای پشتیبانی ساختارها صرف می‌شود. وقتی که هیچ فرضی در مورد مقادیر نداریم استراتژی حریصانه Greedy algorithm در بدترین حالت در پیاده‌سازی می‌شود.در حقیقت یک روش پیاده‌سازی آن این است که با یک آرایه‌ای از پشته‌ها که بوسیلهٔ مقادیر کارت‌های سر(top) مرتب شده‌اند کار می‌کنیم که در این روش برای وارد کردن کارت جدید(insert) می‌توان از جستجوی باینری استفاده کرد که در حالت بدبینانه دارای است که P در این جا تعداد کپه‌ها است.برای کامل کردن مرتب‌سازی در بدترین حالت می‌شود. | ## بخش 3: مرتب‌سازی شکیبانه | در هر مرحله کارتی که کمترین مقدار را در topهای سمت چپ کپه مورد نظر دارد بازیابی می‌شود و بعد دوباره تعدادی از کارها باید انجام شود. با وجود این وارد کردن اولین کپه در لیست کپه‌ها ی باقی‌مانده با مراجعه به کارت‌های مرتب شدهٔ سر (top) انجام شود که در هر مرحله هزینهٔ دارد که در کل با توجه بهn مرحله دارای پیچیدگی زمانی است. الگوریتم برای پیدا کردن بزرگترین زیر دنبالهٔ صعودی ابتدا الگوریتم مرتب‌سازی که در بالا توضیح داده شد را اجرا کنید. در نتیجه آن تعداد اعداد بدست آمده برای هر کپه دارای طول‌های مساوی در بزرگترین زیر دنباله صعودی دارد. هر وقت که یک کارت در سر(top) یک کپه قرار می‌گیرد یک پوینتر به عقب (برگشتی) به کارت سر در کپهٔ قبلی نگه دارید (مثلاً فرض کنید یک عدد با مقداری کمتر از کارت جدید داشته باشیم). | ## جمع‌بندی | در آخر با توجه به اشاره گر به عقب از کارت سر آخرین کپه می‌توانیم یک زیر دنباله نزولی از بزرگترین طول‌ها بازیابی کنیم؛ که در این روش یک حالت بازگشت دارد که جوابی برای الگوریتم بزرگترین زیر دنباله صعودی است.