Uploaded by s.jafarzadeh78

6.3 Radix Sort

advertisement
‫ساختمان داده ها‬
‫مرتب سازی مبنایی‬
‫مدرس‪ :‬غیاثیشیرازی‬
‫دانشگاه فردوسی مشهد‬
‫تاریخچه‬
‫• الگوریتم مرتب سازی مبنایی اولین بار در سال ‪( 1890‬قبل از‬
‫اختراع کامپیوتر) برای انجام سرشماری در ایاالت متحده‬
‫آمریکا پیاده سازی شد‪.‬‬
‫• این الگوریتم در ماشینی که کارش مرتب سازی کارت های‬
‫سرشماری بود استفاده شد‪.‬‬
‫• ماشین مرتب کننده مکانیکی می توانست برنامه ریزی شود و‬
‫کارت ها را بر اساس اطالعات یک ستون مشخص دسته‬
‫بندی کند‪.‬‬
‫‪2‬‬
‫قالب یک کارت مورد استفاده در سرشماری ‪( 1900‬کارت های‬
‫سرشماری ‪ 1890‬برای صرفه جویی فاقد نوشته بودند)‬
‫‪3‬‬
‫الگوریتم مرتب سازی مبنایی‬
‫• فرض کنیم هر داده عددی ‪ d‬رقمی است‪.‬‬
‫‪4‬‬
‫مثال‬
‫‪5‬‬
‫اثبات درستی با استقرا بر روی تعداد رقم های‬
‫مرتب شده‬
‫• پایه استقرا‪:‬‬
‫– در گام اول داده ها بر حسب رقم اول مرتب هستند‪.‬‬
‫• فرض‪ :‬داده ها بر حسب ‪ k‬رقم سمت راست مرتب هستند‪.‬‬
‫• حکم‪ :‬با مرتب سازی بر حسب رقم ‪ k+1‬داده ها بر حسب‬
‫‪ k+1‬رقم سمت راست مرتب خواهند بود‪.‬‬
‫• اثبات‪ :‬روشن است که داده ها برحسب رقم ‪ k+1‬مرتب‬
‫هستند‪ .‬برای داده هایی که رقم ‪ k+1‬آنها یکسان است‪ ،‬با‬
‫توجه به پایداری الگوریتم مرتب سازی و فرض استقرا‪ ،‬حکم‬
‫برقرار است‪.‬‬
‫‪6‬‬
‫تحلیل زمان اجرا‬
‫• ورودی الگوریتم مرتب سازی مبنایی ‪ n‬داده ‪ d‬رقمی است‪.‬‬
‫• هر رقم می تواند ‪ k‬مقدار مختلف داشته باشد‬
‫• در صورت استفاده از الگوریتم مرتب سازی شمارشی برای‬
‫مرتب کردن داده ها بر حسب هر رقم‪ ،‬زمان اجرای الگوریتم‬
‫مرتب سازی مبنایی از مرتبه 𝑘 ‪ Θ 𝑑 𝑛 +‬خواهد بود‪.‬‬
‫‪7‬‬
‫زمان اجرا بر روی ‪ n‬عدد صحیح متمایز ‪b‬بیتی‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪8‬‬
‫‪ n‬عدد داریم‪.‬‬
‫هر عدد ‪ b‬بیت است‪)d=b( .‬‬
‫هر بیت دو مقدار دارد‪)k=2( .‬‬
‫چون اعداد متمایز هستند پس 𝑏‪𝑛 ≤ 2‬‬
‫طبق تحلیل قبل‪ ،‬زمان اجرای الگوریتم مرتب سازی مبنایی‬
‫برابر است با‪:‬‬
‫𝑛 ‪𝑏 𝑛 + 2 > 𝑛 log‬‬
‫آیا می توان بهتر عمل کرد؟‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪9‬‬
‫ایده‪ :‬هر ‪ r‬بیت را با هم یک رقم در نظر‬
‫بگیریم‪.‬‬
‫‪ n‬عدد داریم‪.‬‬
‫هر عدد ‪ b/r‬رقم دارد‪)𝑑 = 𝑏/𝑟( .‬‬
‫هر رقم 𝑟‪ 2‬مقدار دارد‪)𝑘 = 2𝑟 ( .‬‬
‫طبق تحلیل قبل‪ ،‬زمان اجرای الگوریتم مرتب سازی مبنایی‬
‫برابر است با‪:‬‬
‫𝑏‬
‫‪Θ 𝑑 𝑛+𝑘 =Θ‬‬
‫𝑟‪𝑛 + 2‬‬
‫𝑟‬
‫انتخاب ‪r‬‬
‫• دیدم که زمان اجرای الگوریتم مرتب سازی مبنایی در حالت‬
‫قبل برابر بود با‬
‫𝑏‬
‫‪T r =Θ‬‬
‫𝑟‪𝑛 + 2‬‬
‫𝑟‬
‫• برای کمینه سازی مقدار فوق نسبت به ‪ r‬مشتق می گیریم و‬
‫مقدار آن را مسای صفر قرار می دهیم‪.‬‬
‫𝑏‬
‫𝑟 ‪𝑏ln 2‬‬
‫𝑟‬
‫‪− 2 𝑛+2 +‬‬
‫‪2 =0‬‬
‫𝑟‬
‫𝑟‬
‫‪10‬‬
‫انتخاب ‪r‬‬
‫𝑟‪𝑟 ln 2 2𝑟 = 𝑛 + 2‬‬
‫𝑛 = 𝑟‪⇒ (𝑟 ln 2 − 1)2‬‬
‫𝑛 ‪⇒ log(𝑟 ln 2 − 1) + 𝑟 = log‬‬
‫• با توجه به کوچک بودن مقدار )‪log(𝑟 ln 2 − 1‬‬
‫نتیجه می گیریم که مقدار بهینه ‪ r‬تقریبا 𝑛 ‪ log‬است‪.‬‬
‫در این صورت زمان اجرای الگوریتم برابر است با‪:‬‬
‫𝑏‬
‫𝑏‬
‫𝑟‬
‫‪Θ‬‬
‫‪𝑛+2‬‬
‫‪=Θ‬‬
‫𝑛‬
‫𝑟‬
‫𝑛 ‪log‬‬
‫‪11‬‬
‫تحلیل مرتبه زمانی‬
‫• دیدیم که مرتبه زمانی الگوریتم برابر است با‬
‫𝑏‬
‫‪Θ‬‬
‫𝑛‬
‫𝑛 ‪log‬‬
‫• اگر 𝑛 ‪ 𝑏 = 𝑂 log‬آنگاه زمان اجرای الگوریتم از مرتبه‬
‫)𝑛(‪ Θ‬خواهد بود‪.‬‬
‫• توجه کنید که شرط 𝑛 ‪ 𝑏 = 𝑂 log‬با 𝑏‪𝑛 = Ω 2‬‬
‫معادل است و معنای آن این است که تعداد داده ها باید با‬
‫تعداد کل داده های قابل نمایش با ‪ b‬بیت متناسب باشد‪.‬‬
‫‪12‬‬
‫تمرین‬
‫• ص ‪ 199‬کتاب ‪CLRS‬‬
‫• تمرین ‪8.3-1‬‬
‫• تمرین ‪8.3-4‬‬
‫‪13‬‬
‫مطالعه بیشتر‬
‫• بخش ‪ 8.3‬با شروع از صفحه ‪ 197‬کتاب ‪CLRS‬‬
‫‪14‬‬
Download