مرتب‌سازی فلش

مرتب‌سازی Flash الگوریتم مرتب‌سازی ای  بر اساس توزیع احتمال است که برای داده‌های با توزیع یکنواخت، با حافظه نسبتا بیشتر، دارای پیچیدگی زمان اجرای  است. این الگوریتم اولین بار در سال ۱۹۹۸ توسط Karl-Dietrich Neubert منتشر شد.

مفهوم 
ایده اصلی مرتب‌سازی Flash این است که  برای مجموعه داده‌ای که دارای توزیع احتمال یکنواخت است، با داشتن حد بالا و پایین مجموعه، می‌توان مکان هر عضو را تخمین زد. برای مثال برای مجموعه ای که کمینه آن ۱ و بیشینه آن ۱۰۰ است و ۵۰ هم عضوی از آن مجموعه است منطقی به نظر می‌رسد که پس از مرتب‌سازی، مکان ۵۰ در وسط آرایه مرتب شده باشد. این مکان تخمین زده شده یک کلاس نامیده می‌شود. اگر اعضای مجموعه را از ۱ تا m شماره گذازی کنیم، کلاس A_i به این صورت محاسبه می‌شود:

  

که A مجموعه ورودی است و حاصل عبارت شماره کلاسی است که عضو i ام به آن تعلق دارد.
حد بالا و پایین پوشش داده شده برای تمام کلاس‌ها، به غیر از کلاس آخر که شامل بیشینه هاست، یکسان است. این کلاس بندی اطمینان می‌دهد که هر داده در یک کلاس از داده‌های کلاس پایین‌تر بزرگتر است. این کلاس بندی در واقع یک ترتیب جزئی است که که تعداد وارونگی‌ها را کاهش می‌دهد. سپس برای هر کلاس مرتب‌سازی درجی انجام می‌شود. تا جایی که توزیع احتمال یکنواخت باشد، اندازه کلاس‌ها ثابت می‌ماند و مرتب‌سازی درجی بهینه خواهد بود.

پیاده‌سازی با حافظه بهینه 
برای بهینه کردن حافظه، الگوریتم از ساختمان داده‌های اضافه برای ذخیره کلاس‌ها استفاده نمی‌کند، بلکه حدود بالا و پایین هر کلاس را در وکتوری ای به نام L ذخیره می‌کند. حدود بالا از شمارش تعداد اعضای کلاس و کلاس‌های قبلش حاصل می‌شود. از این حدود بالا می‌توان به عنوان اشاره گر به کلاس‌ها استفاده کرد.
کلاس بندی توسط تعدادی دور انجام می‌شود، به این صورت که یک سر دور از آرایه ورودی A گرفته می‌شود و کلاس اش محاسبه می‌شود. یک عضو سردور معتبر است اگر کلاس بندی نشده باشد. وقتی الگوریتم روی عناصر ورودی حرکت می‌کند از عناصر کلاس بندی شده پرش می‌شود و عناصر کلاس بندی نشده برای ساخت دور جدید استفاده می‌شوند.

سرعت 
در حالت ایده آل داده‌ها به گونه‌ای کلاس بندی می‌شوند که اندازه کلاس‌ها تقریباً مساوی باشد، از آنجا که هزینه مرتب‌سازی هر کلاس  است و با فرض این که  کلاس داشته باشیم و کلاس‌ها را با مرتب‌سازی درجی در کنار هم قرار دهیم هزینه برابر  یا می‌شود و چون  ضریبی از  است پس هزینه نهایی می‌شود.

در بدترین حالت کلاس بندی به گونه‌ای انجام می‌شود که تعداد کلاس‌ها زیاد و در هر کلاس تقریباً یک عنصر قرار می‌گیرد، در این حالت هزینه نهایی برابر هزینه مرحله آخر که قرار دادن کلاس‌ها در کنار هم با مرتب‌سازی درجی است، می‌شود. در نتیجه هزینه بدترین حالت  می‌شود.
انتخاب تعداد کلاس‌ها  بر هزینه الگوریتم بسیار تأثیرگذار است، طی تحقیقی که Neubert انجام داده است  مقدار بهینه برای  خواهد بود.

با توجه به فرایند کلاس بندی، مرتب‌سازی Flash پایدار نیست.

پانویس

پیوند به بیرون 

 Sorting in Linear time
 Implementations of Randomized Sorting on Large Parallel Machines (1992)
 Implementation of Parallel Algorithms (1992)
 Visualization of Flashsort

الگوریتم‌های مرتب‌سازی