مرتب سازی صبورانه یک الگوریتم مرتب سازی است که بر پایهٔ کارت بازی یک نفره است وخاصیتی دارد که می تواند به طوز مؤثر طول بزرگترین زیر دنباله صعودی در یک آزایهٔ داده شده را محاسبه کند.
بازی با یک دسته بر زده شده شروع می شود که 1 , … , n شماره گذاری شده است. ابتدا کارت ها ۱ به ۱ مقدار دهی و توزیع می شوند که البته این مقدار دهی و توزیع در کپه های متوالی و جدا از هم روی میز قرار دارد
•
• در ابتدا هیچ کپه ای از کارت وجود ندارد و اولین کارت که مقدار دهی و توزیع می شود یک کپهٔ جدید به وجود می آورد که تنها دارای یک کارت است.
• هر کارت جدید ممکن است در یکی از دسته های ( کپه های ) موجود قرار بگیرد که در هر کدام از این کپه ها کارت با مقدار بیشتر در آغاز قرار دارد. بنابراین با افزوده شدن پی در پی کارت ها، تعداد کارت های آن کپه یا همهٔ دسته های موجود افزایش پیدا می کند که در نتیجهٔ آن یک دسته جدید شکل می گیرد.
• وقتی که دیگر کارتی وجود ندارد باقی مانده ها را بررسی و محاسبه کنید. ( پایان بازی )
یک مسئله مهم و اساسی در این بازی به اتمام رساندن آن با کمترین تعداد کپه های ممکن است.
آرایه با یک روش مرتب سازی به عنوان ورودی مرتب سازی داده شده است. به این مسئله به دید جمع آوری کارت بنگرید که باید با مرتب سازی آماری هر عنصر بر اساس نمایه ( index ) خود مرتب شود. نکته:
• این بازی از مقدار واقعی کارت ها فقط برای مقایسه بین دو کارت استفاده می نماید که با این کار ارتباط هر دو عنصر دلخواه از آرایه بررسی می شود.
حال بازی مرتب سازی صبورانه را شبیه سازی کنید وهر کارت جدید را در چپ ترین کپه با رعایت قانون قرار دهید. در هر مرحله از این بازی با این استراتژی برچسب های ( label ) کارت های سر ( top ) از چپ به راست به طور صعودی هستند. حال توالی مرتب شده را بازیابی کنید و کارت با کمترین مقدار از سر ستون در هر مرحله جمع آوری کنید.
اگر تعداد کارت ها در محدودهٔ 1 , … , n ، باشد یک پیاده سازی کارآمد با O ( n ⋅ log log n ) در بدترین حالت برای قرار دادن کارت ها در کپه ها وجود دارد ( که برای یک مرتب سازی کامل در بدترین حالت O ( n ⋅ log n ) است و O ( 1 ⋅ n ) ) فضا برای پشتیبانی ساختارها صرف می شود. با توجه به گفتهٔ van Emde Boas tree تعدادی از این گفته ها به حقیقت پیوسته است. وقتی که هیچ فرضی در مورد مقادیر نداریم استراتژی حریصانه Greedy algorithm در بدترین حالت در O ( n ⋅ log n ) پیاده سازی می شود. در حقیقت یک روش پیاده سازی آن این است که با یک آرایه ای از پشته ها که بوسیلهٔ مقادیر کارت های سر ( top ) مرتب شده اند کار می کنیم که در این روش برای وارد کردن کارت جدید ( insert ) می توان از جستجوی باینری استفاده کرد که در حالت بدبینانه دارای O ( 1 ⋅ log p ) است که P در این جا تعداد کپه ها است. برای کامل کردن مرتب سازی در بدترین حالت O ( n ⋅ log n ) می شود. در هر مرحله کارتی که کمترین مقدار را در topهای سمت چپ کپه مورد نظر دارد بازیابی می شود و بعد دوباره تعدادی از کارها باید انجام شود. پیدا کردن کارت بعدی بوسیلهٔ جستجوی آن در میان همهٔ topهای کپه ها در هر مرحله انجام شود مثل wikibooksها که در بهترین حالت O ( 1 ⋅ n 2 ) . با وجود این وارد کردن اولین کپه در لیست کپه ها ی باقی مانده با مراجعه به کارت های مرتب شدهٔ سر ( top ) انجام شود که در هر مرحله هزینهٔ دارد که در کل با توجه بهn مرحله دارای پیچیدگی زمانی O ( n ⋅ log n ) است.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفبازی با یک دسته بر زده شده شروع می شود که 1 , … , n شماره گذاری شده است. ابتدا کارت ها ۱ به ۱ مقدار دهی و توزیع می شوند که البته این مقدار دهی و توزیع در کپه های متوالی و جدا از هم روی میز قرار دارد
•
• در ابتدا هیچ کپه ای از کارت وجود ندارد و اولین کارت که مقدار دهی و توزیع می شود یک کپهٔ جدید به وجود می آورد که تنها دارای یک کارت است.
• هر کارت جدید ممکن است در یکی از دسته های ( کپه های ) موجود قرار بگیرد که در هر کدام از این کپه ها کارت با مقدار بیشتر در آغاز قرار دارد. بنابراین با افزوده شدن پی در پی کارت ها، تعداد کارت های آن کپه یا همهٔ دسته های موجود افزایش پیدا می کند که در نتیجهٔ آن یک دسته جدید شکل می گیرد.
• وقتی که دیگر کارتی وجود ندارد باقی مانده ها را بررسی و محاسبه کنید. ( پایان بازی )
یک مسئله مهم و اساسی در این بازی به اتمام رساندن آن با کمترین تعداد کپه های ممکن است.
آرایه با یک روش مرتب سازی به عنوان ورودی مرتب سازی داده شده است. به این مسئله به دید جمع آوری کارت بنگرید که باید با مرتب سازی آماری هر عنصر بر اساس نمایه ( index ) خود مرتب شود. نکته:
• این بازی از مقدار واقعی کارت ها فقط برای مقایسه بین دو کارت استفاده می نماید که با این کار ارتباط هر دو عنصر دلخواه از آرایه بررسی می شود.
حال بازی مرتب سازی صبورانه را شبیه سازی کنید وهر کارت جدید را در چپ ترین کپه با رعایت قانون قرار دهید. در هر مرحله از این بازی با این استراتژی برچسب های ( label ) کارت های سر ( top ) از چپ به راست به طور صعودی هستند. حال توالی مرتب شده را بازیابی کنید و کارت با کمترین مقدار از سر ستون در هر مرحله جمع آوری کنید.
اگر تعداد کارت ها در محدودهٔ 1 , … , n ، باشد یک پیاده سازی کارآمد با O ( n ⋅ log log n ) در بدترین حالت برای قرار دادن کارت ها در کپه ها وجود دارد ( که برای یک مرتب سازی کامل در بدترین حالت O ( n ⋅ log n ) است و O ( 1 ⋅ n ) ) فضا برای پشتیبانی ساختارها صرف می شود. با توجه به گفتهٔ van Emde Boas tree تعدادی از این گفته ها به حقیقت پیوسته است. وقتی که هیچ فرضی در مورد مقادیر نداریم استراتژی حریصانه Greedy algorithm در بدترین حالت در O ( n ⋅ log n ) پیاده سازی می شود. در حقیقت یک روش پیاده سازی آن این است که با یک آرایه ای از پشته ها که بوسیلهٔ مقادیر کارت های سر ( top ) مرتب شده اند کار می کنیم که در این روش برای وارد کردن کارت جدید ( insert ) می توان از جستجوی باینری استفاده کرد که در حالت بدبینانه دارای O ( 1 ⋅ log p ) است که P در این جا تعداد کپه ها است. برای کامل کردن مرتب سازی در بدترین حالت O ( n ⋅ log n ) می شود. در هر مرحله کارتی که کمترین مقدار را در topهای سمت چپ کپه مورد نظر دارد بازیابی می شود و بعد دوباره تعدادی از کارها باید انجام شود. پیدا کردن کارت بعدی بوسیلهٔ جستجوی آن در میان همهٔ topهای کپه ها در هر مرحله انجام شود مثل wikibooksها که در بهترین حالت O ( 1 ⋅ n 2 ) . با وجود این وارد کردن اولین کپه در لیست کپه ها ی باقی مانده با مراجعه به کارت های مرتب شدهٔ سر ( top ) انجام شود که در هر مرحله هزینهٔ دارد که در کل با توجه بهn مرحله دارای پیچیدگی زمانی O ( n ⋅ log n ) است.
wiki: مرتب سازی شکیبانه