GuilanCS | علوم کامپیوتر
1.04K subscribers
1.61K photos
60 videos
225 files
1.01K links
💻انجمن علمی علوم کامپیوتر دانشگاه گیلان

🔶اینستاگرام انجمن:https://instagram.com/csguilan

🔷ارتباط با دبیر انجمن(اسماعیل ذوالفقاری):
@anon7vip


🔗گروه دانشجویان:
Download Telegram
اما برای مرتب سازی ادغامی باید بگیم که تعداد کل مقایسه ها برابر هست با مجموع تعداد مقایسه ها در فراخوانی بازگشتی با U و تعداد مقایسه ها در فراخوانی بازگشتی با V به علاوه ی تعداد مقایسه های موجود در فراخوانی تابع merge . پس داریم :
با جایگذاری مناسب کل داده ها ی n داریم :
که با حل معادله ی بازگشتی فوق به n log n خواهید رسید .
روش بعدی هم الگوریتم مرتب سازی سریع هست quick sort
این روش نسبتا مشابه روش قبلی هست . توی این روش ما یک عنصر رو به عنوان عنصر محوری انتخاب می کنیم و عناصر کوچکتر از محور رو در یک زیر آرایه و عناصر بزرگتر رو به سمت زیر آرایه ی دیگه ای می بریم . عنصر محوری دلخواه هست ولی معمولا برای سهولت ، از عنصر اول به عنوان محور استفاد می کنن . زیر آرایه ها هم عنصر محوری میگیرن و همون روند تکرار میشه و به همین ترتیب ادامه پیدا میکنه تا کل آرایه با مرتب شدن زیر آرایه ها ، مرتب بشه . واضح هست که اینم نوعی روش تقسیم و حل هست .
اول شبه کد افراز رو میگیم که در الگوریتم مرتب سازی سریع استفاده شده و سپس شبه کد خود الگوریتم رو بیان می کنیم .
تحلیل:
پیچیدگی زمانی الگوریتم افراز T(n)=n-1 هست چون تمام عناصر به جز اولی مقایسه میشن .
اما برای مرتب سازی سریع بدترین حالت زمانی هست که آرایه به صورت غیر نزولی مرتب شده باشه از اول . ( به عنوان تمرین خودتون فکر کنید که چرا !!)📝
در فرمول بالا ، زمان اجرای مرتب سازی زیر آرایه ی چپ ، زیر آرایه ی راست و زمان لازم برای افراز با هم جمع شدند.
با حل معادله ی بازگشتی فوق به رابطه ی زیر میرسید
که مشخصا معلوم میکنه الگوریتم از مرتبه ی n به توان 2 هست
لازم به ذکر هست که پیچیدگی این الگوریتم در حالت میانگین از مرتبه ی nlog n هست .
اما برنامه ریزی پویا چیه ؟؟
این روش از لحاظ تقسیم کل مسئله به مسائل کوچک تر، مشابه روش تقسیم و حل هست ولی ما اول تقسیم می کنیم و نتایج رو ذخیره می کنیم و در ادامه هر زمان که به یکی از اونها احساس نیاز شد ، به جای محاسبه ی دوباره ، اون نتایج رو به اصطلاح بازیابی می کنیم .