صفحه اصلی

صفحه شخصی مسعود اقدسی‌فام
الگوریتمستان - آموخته‌های من از دنیای برنامه‌نویسی و طراحی الگوریتم
تعداد امتیازهای ثبت شده:  513

میانگین امتیازهای ثبت شده:  4.29 از 5.00
عبارت مورد نظر:

     

الگوریتمستان آشنایی با روش Divide and Conquer (تقسیم و حل / تقسیم و غلبه) و کاربردهای آن در مرتب‌سازی، جستجو و حل مسائل الگوریتمی دیگر

الگوریتمستان آشنایی با قالب‌ها به عنوان یکی از امکانات متمایز ++C از C

الگوریتمستان آشنایی با کلاس‌های حافظه و کاربرد آنها در زبان ++C

الگوریتمستان آشنایی با توابع دوست کلاس در زبان برنامه‌نویسی ++C و کاربرد آنها در سربارگذاری عملگرها

الگوریتمستان بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با روش مرتب‌سازی حبابی و بحث در مورد عملکرد آن، با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با روش مرتب‌سازی انتخابی،همراه با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان بررسی روش‌های مختلف محاسبه ضرایب دوجمله‌ای نیوتن یا ترکیب دو عدد با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان بررسی مساله Simple Addition، از سوالات آمادگی مسابقات برنامه‌نویسی

الگوریتمستان آشنایی با روش مرتب‌سازی درجی، همراه با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان بررسی سوال مسابقات برنامه‌نویسی Turn for MEGA، و راه حل آن


»   مرتب‌سازی هرمی سه‌شنبه، 12 مهر ماه 1390، ساعت 17:11

مطلبی که می‌خوانید، ویراست دوم مطلبی است که نسخه اولیه آن با عنوان "مرتب سازی هرمی" از طریق وب‌سایت برنامه‌نویسی و طراحی الگوریتم منتشر شده بود.

مرتب‌سازی هرمی (Heap Sort) یکی از روش‌های مشهور مرتب‌سازی داده‌ها است که بر اساس خصوصیات درخت heap (هیپ، هرم یا کپه)  و عملکرد آن پیاده‌سازی شده است.

بر اساس تعریف درخت heap، در یک max-heap (یا min-heap) بزرگترین (یا کوچکترین) مقدار بین داده‌ها همواره در ریشه درخت قرار دارد. یافتن بزرگترین (یا کوچکترین) عنصر بین عناصر، هزینه ثابت ( Ө( 1 دارد. با حذف این عنصر از درخت، بزرگترین (یا کوچکترین) عنصر بعدی مجددا در ریشه قرار می‌گیرد. به این ترتیب با حذف متوالی عناصر درخت heap و درج آنها در محل جدید، یک آرایه مرتب‌شده نزولی (یا صعودی) به دست خواهد آمد.

به عنوان نمونه، min-heap زیر را در نظر بگیرید:

 

درخت هیپ

 

مراحل مرتب‌سازی هرمی به ترتیب زیر خواهد بود:

 

Step 0 )   min-heap: 1, 4, 5, 8, 6, 9      -    list:

Step 1 )   min-heap: 4, 6, 5, 8, 9          -    list: 1

Step 2 )   min-heap: 5, 6, 9, 8              -    list: 1, 4

Step 3 )   min-heap: 6, 8, 9                  -    list: 1, 4, 5

Step 4 )   min-heap: 8, 9                      -    list: 1, 4, 5, 6

Step 5 )   min-heap: 9                          -    list: 1, 4, 5, 6, 8

Step 6 )   min-heap:                             -    list: 1, 4, 5, 6, 8, 9

 

در پایان، آرایه list شامل اطلاعات مرتب‌شده صعودی است.

 

بررسی پیچیدگی زمانی مرتب‌سازی هرمی

برای مرتب‌کردن عناصر با استفاده از درخت heap، نیاز به n عمل حذف گره ریشه از درخت (یا عمل pop) وجود دارد. عمل حذف گره ریشه در درخت heap خود از مرتبه ( Θ( log n است. در نتیجه کل این عملیات از مرتبه ( Θ( n log n خواهد بود.

نکته قابل توجه دیگر، ساخت درخت heap از عناصر مورد نظر برای مرتب‌سازی است. در حالت عادی عناصر به صورت نامرتب و با چیدمان تصادفی در اختیار هر الگوریتم مرتب‌سازی قرار می‌گیرند. در این حالت یک هزینه زمانی دیگر برای ساخت درخت heap از روی چنین لیستی مورد نیاز است.

 

بررسی فضای مصرفی مرتب‌سازی هرمی

در روش بحث شده برای مرتب کردن n عنصر، دو آرایه n عنصری نیاز است. یکی از این آرایه‌ها عناصر را به فرم درخت heap به عنوان ورودی الگوریتم، و دیگری عناصر مرتب شده را به عنوان خروجی الگوریتم شامل می‌شوند. در چنین حالتی این الگوریتم یک روش مرتب‌سازی درجا نیست. با اندکی تغییر در روش پیاده‌سازی الگوریتم می‌توان عملکرد دو آرایه را در یک آرایه ادغام کرده، و میزان حافظه مصرفی را کاهش داد.

درخت min-heap مثال فوق را در نظر بگیرید. با حذف عدد یک به عنوان گره ریشه درخت و اعمال تغییرات لازم به نتیجه زیر می‌رسیم:

 

مرتب‌سازی هرمی

 

خط عمودی پررنگ، انتهای اطلاعات درخت در آرایه را نشان می‌دهد. خانه شماره 6 حاوی اطلاعات سوخته و بلا استفاده است. پس می‌توانیم عنصر حذف شده را در آن قرار دهیم:

 

مرتب‌سازی هرمی

 

توجه داشته باشید که در حال حاضر درخت از پنج عنصر تشکیل شده است و عنصر ششم آرایه از عناصر درخت نیست. به همین ترتیب با حذف مجدد گره ریشه با مقدار 4 آرایه زیر حاصل می‌شود:

 

مرتب‌سازی هرمی

 

و با درج عنصر حذف شده در محل بلا استفاده:

 

مرتب‌سازی هرمی

 

به همین ترتیب با تکرار الگوریتم نتیجه نهایی حاصل می‌شود:

 

مرتب‌سازی هرمی

 

البته توجه داشته باشید که بر خلاف نتیجه نهایی روش قبل، در این حالت عناصر به صورت نزولی به دست آمده‌اند. یعنی در این روش از درخت min-heap برای مرتب‌سازی نزولی و از درخت max-heap برای مرتب‌سازی صعودی استفاده می‌شود.

‌چاپ مطلب
نسخه قابل چاپ مشاهده نسخه قابل چاپ و ارسال به چاپگر
به اشتراک گذاری مطلب
FriendFeed       Twitter       Facebook       Cloob
آمار
تعداد امتیازهای ثبت شده:  13 ،  میانگین امتیازهای ثبت شده:  4.00 از 5.00
‌برچسب‌ها
طراحی الگوریتم‌ها ، درخت‌ها ، مرتب‌سازی
امتیاز مطلب
1 2 3 4 5
ارسال پیام
» نجمه

جمعه، 6 آبان ماه 1390، ساعت 23:25
خیلی ممنون
خیلی خوبه...کاش کد هرمی رو هم قرار داده بودید

» حسین

چهارشنبه، 7 دی ماه 1390، ساعت 20:02
لطفا کد هرمی رو هم قرار دهید

» محسن

جمعه، 30 دی ماه 1390، ساعت 09:54
ممنون ..

» منادی

یکشنبه، 2 بهمن ماه 1390، ساعت 15:57
پرمحتوایی داری
متشکر



دوست عزیزم، لطفا قبل از ارسال پیام به موارد زیر توجه داشته باشید:

1- تا حد ممکن از حروف فارسی برای نگارش پیام خود استفاده کنید. امکان ارسال پیام لاتین و کدهای برنامه‌نویسی با چیدمان چپ به راست نیز وجود دارد.
2- به درخواست پروژه‌های آماده و موارد مشابه پاسخ داده نخواهد شد.
3- از قرار دادن هرگونه نشانی یا شماره تماس در متن پیام خودداری کنید.
4- از ارسال پیام‌های تبلیغاتی خودداری کنید.
5- از ارسال سوال و پیام غیرمرتبط با مطلب ارائه شده خودداری کنید.
6- لطفا نظر خود را در مورد مطلب ارائه شده، با ثبت امتیاز مشخص نمایید.

پیشاپیش از همکاری شما سپاسگذارم.


نام:  
پست الکترونیک
وب‌سایت:
متن پیام: