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

از ویکی‌پدیا، دانشنامهٔ آزاد

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

مفهوم[ویرایش]

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


  


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

پیاده‌سازی با حافظه بهینه[ویرایش]

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

سرعت[ویرایش]

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


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


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

پانویس[ویرایش]

  1. ۱٫۰ ۱٫۱ ۱٫۲ Neubert, Karl-Dietrich (1998). "The Flashsort Algorithm". Dr. Dobb's Journal: 123. Retrieved 2007-11-06. {{cite journal}}: Unknown parameter |month= ignored (help)
  2. ۲٫۰ ۲٫۱ Karl-Dietrich Neubert (1998). "The FlashSort Algorithm". Retrieved 2007-11-06.
  3. Li Xiao, Xiaodong Zhang, Stefan A. Kubricht. "Cache-Effective Quicksort". Improving Memory Performance of Sorting Algorithms. Department of Computer Science, College of William and Mary, Williamsburg, VA 23187-8795. Archived from the original on 2 November 2007. Retrieved 2007-11-06.{{cite web}}: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)

پیوند به بیرون[ویرایش]