ساختمان داده ها مرتب سازی مبنایی مدرس :غیاثیشیرازی دانشگاه فردوسی مشهد تاریخچه • الگوریتم مرتب سازی مبنایی اولین بار در سال ( 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