مرتب سازی Flash الگوریتم مرتب سازی ای بر اساس توزیع احتمال است که برای داده های با توزیع یکنواخت، با حافظه نسبتا بیشتر، دارای پیچیدگی زمان اجرای O ( n ) است. این الگوریتم اولین بار در سال ۱۹۹۸ توسط Karl - Dietrich Neubert منتشر شد. [ ۱]
ایده اصلی مرتب سازی Flash این است که برای مجموعه داده ای که دارای توزیع احتمال یکنواخت است، با داشتن حد بالا و پایین مجموعه، می توان مکان هر عضو را تخمین زد. برای مثال برای مجموعه ای که کمینه آن ۱ و بیشینه آن ۱۰۰ است و ۵۰ هم عضوی از آن مجموعه است منطقی به نظر می رسد که پس از مرتب سازی، مکان ۵۰ در وسط آرایه مرتب شده باشد. این مکان تخمین زده شده یک کلاس نامیده می شود. اگر اعضای مجموعه را از ۱ تا m شماره گذازی کنیم، کلاس A_i به این صورت محاسبه می شود:
K ( A i ) = 1 + INT ( ( m − 1 ) A i − A min A max − A min )
که A مجموعه ورودی است و حاصل عبارت شماره کلاسی است که عضو i ام به آن تعلق دارد. حد بالا و پایین پوشش داده شده برای تمام کلاس ها، به غیر از کلاس آخر که شامل بیشینه هاست، یکسان است. این کلاس بندی اطمینان می دهد که هر داده در یک کلاس از داده های کلاس پایین تر بزرگتر است. این کلاس بندی در واقع یک ترتیب جزئی است که که تعداد وارونگی ها را کاهش می دهد. سپس برای هر کلاس مرتب سازی درجی انجام می شود. تا جایی که توزیع احتمال یکنواخت باشد، اندازه کلاس ها ثابت می ماند و مرتب سازی درجی بهینه خواهد بود. [ ۱]
برای بهینه کردن حافظه، الگوریتم از ساختمان داده های اضافه برای ذخیره کلاس ها استفاده نمی کند، بلکه حدود بالا و پایین هر کلاس را در وکتوری ای به نام L ذخیره می کند. حدود بالا از شمارش تعداد اعضای کلاس و کلاس های قبلش حاصل می شود. از این حدود بالا می توان به عنوان اشاره گر به کلاس ها استفاده کرد. کلاس بندی توسط تعدادی دور انجام می شود، به این صورت که یک سر دور از آرایه ورودی A گرفته می شود و کلاس اش محاسبه می شود. یک عضو سردور معتبر است اگر کلاس بندی نشده باشد. وقتی الگوریتم روی عناصر ورودی حرکت می کند از عناصر کلاس بندی شده پرش می شود و عناصر کلاس بندی نشده برای ساخت دور جدید استفاده می شوند. [ ۱] [ ۲]
در حالت ایده آل داده ها به گونه ای کلاس بندی می شوند که اندازه کلاس ها تقریباً مساوی باشد، از آنجا که هزینه مرتب سازی هر کلاس m ∗ O ( m ) است و با فرض این که m کلاس داشته باشیم و کلاس ها را با مرتب سازی درجی در کنار هم قرار دهیم هزینه برابر m ∗ O ( 1 ) یا O ( m ) می شود و چون m ضریبی از n است پس هزینه نهایی O ( n ) می شود.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفایده اصلی مرتب سازی Flash این است که برای مجموعه داده ای که دارای توزیع احتمال یکنواخت است، با داشتن حد بالا و پایین مجموعه، می توان مکان هر عضو را تخمین زد. برای مثال برای مجموعه ای که کمینه آن ۱ و بیشینه آن ۱۰۰ است و ۵۰ هم عضوی از آن مجموعه است منطقی به نظر می رسد که پس از مرتب سازی، مکان ۵۰ در وسط آرایه مرتب شده باشد. این مکان تخمین زده شده یک کلاس نامیده می شود. اگر اعضای مجموعه را از ۱ تا m شماره گذازی کنیم، کلاس A_i به این صورت محاسبه می شود:
K ( A i ) = 1 + INT ( ( m − 1 ) A i − A min A max − A min )
که A مجموعه ورودی است و حاصل عبارت شماره کلاسی است که عضو i ام به آن تعلق دارد. حد بالا و پایین پوشش داده شده برای تمام کلاس ها، به غیر از کلاس آخر که شامل بیشینه هاست، یکسان است. این کلاس بندی اطمینان می دهد که هر داده در یک کلاس از داده های کلاس پایین تر بزرگتر است. این کلاس بندی در واقع یک ترتیب جزئی است که که تعداد وارونگی ها را کاهش می دهد. سپس برای هر کلاس مرتب سازی درجی انجام می شود. تا جایی که توزیع احتمال یکنواخت باشد، اندازه کلاس ها ثابت می ماند و مرتب سازی درجی بهینه خواهد بود. [ ۱]
برای بهینه کردن حافظه، الگوریتم از ساختمان داده های اضافه برای ذخیره کلاس ها استفاده نمی کند، بلکه حدود بالا و پایین هر کلاس را در وکتوری ای به نام L ذخیره می کند. حدود بالا از شمارش تعداد اعضای کلاس و کلاس های قبلش حاصل می شود. از این حدود بالا می توان به عنوان اشاره گر به کلاس ها استفاده کرد. کلاس بندی توسط تعدادی دور انجام می شود، به این صورت که یک سر دور از آرایه ورودی A گرفته می شود و کلاس اش محاسبه می شود. یک عضو سردور معتبر است اگر کلاس بندی نشده باشد. وقتی الگوریتم روی عناصر ورودی حرکت می کند از عناصر کلاس بندی شده پرش می شود و عناصر کلاس بندی نشده برای ساخت دور جدید استفاده می شوند. [ ۱] [ ۲]
در حالت ایده آل داده ها به گونه ای کلاس بندی می شوند که اندازه کلاس ها تقریباً مساوی باشد، از آنجا که هزینه مرتب سازی هر کلاس m ∗ O ( m ) است و با فرض این که m کلاس داشته باشیم و کلاس ها را با مرتب سازی درجی در کنار هم قرار دهیم هزینه برابر m ∗ O ( 1 ) یا O ( m ) می شود و چون m ضریبی از n است پس هزینه نهایی O ( n ) می شود.
wiki: مرتب سازی فلش